当所属变量不可变时,如何插入析构函数调用“fn drop(&mut self)”调用?

2024-01-16

据我了解,当一个变量的类型实现Drop超出范围,调用fn drop(&mut self)函数被插入,并将新创建的可变引用传递给超出范围的变量。

但是,如果变量是不可变绑定的,并且可变借用它是非法的,那么这怎么可能呢?这是我正在谈论的一个例子:

fn main() {  
  let x = vec![1, 2, 3];
  let y = &mut x;
}

这会产生以下错误:不能借用不可变局部变量x作为可变的正如预期的那样。

类似的事情一定会发生在x会被丢弃,因为drop需要一个可变的引用。


The owner创建变量绑定时,变量的可变性决定可变性,它不是值本身固有的:

fn main() {  
    let x = vec![1, 2, 3];
    let mut z = x;
    let y = &mut z;
}

您可以将删除视为当最后一个程序员命名的变量绑定放弃该变量的所有权时发生的情况。神奇的 Drop-fairy 获得了您现在不需要的变量的所有权,并使用可变绑定。然后Drop-fairy就可以调用Drop::drop在执行最后的魔法以释放项目本身占用的空间之前。

NoteDrop-fairy 还不是一个真正的 Rust 概念。该 RFC 仍处于非常初级的阶段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当所属变量不可变时,如何插入析构函数调用“fn drop(&mut self)”调用? 的相关文章

随机推荐