当我使用引用而不是拥有的值调用 std::mem::drop 时会发生什么?

What happens when I call std::mem::drop with a reference instead of an owned value?

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

    drop(k);

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

Playground

为什么我删除后还能用kdrop 不会自动取消引用吗?如果是,那为什么?对于 &strDrop 的实现是什么样的?

What happens when I call std::mem::drop with a reference

引用本身被删除。

a reference instead of an owned value

引用 一个值。

Why am I still able to use k after dropping it?

因为不可变指针实现了 Copy。您传入参考的副本,它已被删除。

Does drop not deref a reference automatically?

不,不是。

what does the implementation of Drop look like for &str?

没有任何类型的引用,不可变的或可变的,所以它 有效 1:

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

另请参阅:

  • Moved variable still borrowing after calling `drop`?
  • Why does a mutable reference to a dropped object still count as a mutable reference?

1 — 作为 ,空 Drop 实现与没有用户提供的 Drop 实现之间存在差异,但就这个问题而言,它们是相同的。