cor*_*zza 5 pointers ownership rust borrow-checker
我的理解是,当类型实现的变量Drop
超出范围时,将fn drop(&mut self)
插入对函数的调用,并将新创建的可变引用传递给超出范围的变量.
但是,如果变量是不可变的,那怎么可能呢?并且可变地借用它是违法的?这是我正在谈论的一个例子:
fn main() {
let x = vec![1, 2, 3];
let y = &mut x;
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:无法将不可变局部变量借用x
为可预期的变量.
类似的东西必须在x
被丢弃时发生,因为drop
期望一个可变的引用.
变量的所有者在创建变量绑定时决定可变性,它不是值本身固有的:
fn main() {
let x = vec![1, 2, 3];
let mut z = x;
let y = &mut z;
}
Run Code Online (Sandbox Code Playgroud)
当最后一个程序员命名的变量绑定放弃变量的所有权时,你可以想到丢弃.神奇的Drop-fairy取得了你现在不需要的变量的所有权,并使用了一个可变的绑定.然后Drop-fairy可以Drop::drop
在做最后的魔法之前调用以释放物品本身所占用的空间.
注意 Drop-fairy并不是真正的Rust概念.RFC仍处于初步阶段.