fn main(){
let k = "fire";
drop(k);
println!("{:?}", k);
}
为什么k
删除后仍然可以使用? drop
是否不会自动取消引用参考?如果是,那为什么呢?对于Drop
,&str
的实现是什么样的?
答案 0 :(得分:4)
当我通过引用呼叫
std::mem::drop
时会发生什么
引用本身已删除。
引用而不是拥有的值
引用是一个值。
为什么
k
删除后仍然可以使用?
因为不可变的指针实现了Copy
。您传入参考的副本并将其删除。
drop
不会自动取消引用吗?
不,不是。
Drop
的{{1}}实施情况如何?
没有任何一种引用是不变的或可变的,所以它是有效的 1 :
&str
另请参阅:
1 —与Peter Hall points out一样,有一个空的impl Drop for &str {
fn drop(&mut self) {}
}
实现和没有用户提供的Drop
实现之间有区别,但是出于目的这个问题,它们是相同的。