[英]How is a destructor call `fn drop(&mut self)` call inserted when the owning variable is immutable?
我的理解是,当一个类型实现Drop
的变量超出范围时,会插入对fn drop(&mut self)
函数的调用,并将新创建的可变引用传递给超出范围的变量。
但是,如果变量是不可变的,那怎么可能呢?并且可变地借用它是违法的? 这是我正在谈论的一个例子:
fn main() {
let x = vec![1, 2, 3];
let y = &mut x;
}
这会产生以下错误: 无法将不可变局部变量x
作为预期的可变对象借用 。
当x
被丢弃时必须发生类似的事情,因为drop
需要一个可变的引用。
变量的所有者在创建变量绑定时决定可变性,它不是值本身固有的:
fn main() {
let x = vec![1, 2, 3];
let mut z = x;
let y = &mut z;
}
当最后一个程序员命名的变量绑定放弃变量的所有权时,你可以想到丢弃。 神奇的Drop-fairy取得了你现在不需要的变量的所有权,并使用了一个可变的绑定。 然后Drop-fairy可以在做最后的魔法之前调用Drop::drop
来释放物品本身占用的空间。
注意 Drop-fairy并不是真正的Rust概念。 RFC仍处于初步阶段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.