我的理解是,当类型实现的变量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期望一个可变的引用.
我试图了解 Rust 指针类型及其与可变性的关系。具体来说,声明一个保存指针且本身可变的变量的方法——即可以指向其他内存,并声明数据本身是可变的——即可以通过指针变量的值进行更改。
这就是我对简单引用工作方式的理解:
let mut a = &5; // a is a mutable pointer to immutable data
let b = &mut 5; // b is an immutable pointer to mutable data
Run Code Online (Sandbox Code Playgroud)
所以a可以改为指向其他东西,而b不能。但是, 指向的数据b可以通过 更改b,而不能通过 更改a。我的理解正确吗?
对于问题的第二部分——为什么Box::new表现似乎不同?这是我目前的理解:
let mut a = Box::new(5); // a is a mutable pointer to mutable data
let c = Box::new(7); // c is an immutable pointer to immutable …Run Code Online (Sandbox Code Playgroud)