当我使用引用而不是拥有的值调用 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);
}
为什么我删除后还能用k
? drop
不会自动取消引用吗?如果是,那为什么?对于 &str
,Drop
的实现是什么样的?
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
实现之间存在差异,但就这个问题而言,它们是相同的。
fn main() {
let k = "fire";
drop(k);
println!("{:?}", k);
}
为什么我删除后还能用k
? drop
不会自动取消引用吗?如果是,那为什么?对于 &str
,Drop
的实现是什么样的?
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
实现之间存在差异,但就这个问题而言,它们是相同的。