fn main() {
let k = "fire";
drop(k);
println!("{:?}", k);
}
为什么在丢弃引用之后仍然能够使用k
?drop
是否不会自动取消对引用的引用?如果是,为什么?&str
的Drop
实现是什么样子的?
fn main() {
let k = "fire";
drop(k);
println!("{:?}", k);
}
为什么在丢弃引用之后仍然能够使用k
?drop
是否不会自动取消对引用的引用?如果是,为什么?&str
的Drop
实现是什么样子的?
如果我用引用调用
std::mem::drop
会发生什么?
引用本身会被丢弃。
相较于拥有值,使用引用会发生什么?
引用就是一个值。
为什么在丢弃
k
后我仍然能使用它?
因为不可变指针实现了Copy
。你传递的是引用的副本,它被丢弃。
drop
不会自动解除引用吗?
不会。
&str
的Drop
实现是什么样子的?
对于任何一种类型的引用(包括不可变和可变),都不存在Drop
实现,因此1实际上没有这个方法:
impl Drop for &str {
fn drop(&mut self) {}
}
参见:
1 — 正如Peter Hall所指出的那样,拥有空的Drop
实现和没有用户提供的Drop
实现之间存在差异,但对于此问题,它们是相同的。
Drop
实现的事实就具有其他含义,因此这并不完全正确。 - Peter Hall