首页 > 解决方案 > 当我使用引用而不是拥有的值调用 std::mem::drop 时会发生什么?

问题描述

fn main() {
    let k = "fire";

    drop(k);

    println!("{:?}", k);
}

操场

k为什么我掉了之后还能用?drop不会自动取消引用?如果是,那为什么?的实现是Drop什么样的&str

标签: referencerustraii

解决方案


当我打电话std::mem::drop给参考时会发生什么

引用本身被删除。

引用而不是拥有的值

引用一个值。

k为什么我掉了之后还能用?

因为不可变指针实现了Copy. 你传入一个引用的副本,它就被删除了。

drop不会自动取消引用?

不,不是的。

的实现是Drop什么样的&str

没有任何类型的参考,不可变或可变的,所以它实际上是 1

impl Drop for &str {
    fn drop(&mut self) {}
}

也可以看看:


1 — 正如Peter Hall 指出的那样Drop,有一个空的实现和没有用户提供的实现是有区别的Drop,但就这个问题而言,它们是相同的。


推荐阅读