相关疑难解决方法(0)

当拥有变量是不可变的时,析构函数如何调用`fn drop(&mut self)`调用?

我的理解是,当类型实现的变量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期望一个可变的引用.

pointers ownership rust borrow-checker

5
推荐指数
1
解决办法
134
查看次数

参考和盒子之间的可变性差异

我试图了解 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)

pointers reference immutability rust

3
推荐指数
1
解决办法
1991
查看次数