【发布时间】:2015-10-12 14:21:59
【问题描述】:
我试图理解 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
所以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 data
new 应该返回一个指向一些堆分配数据的指针,但它指向的数据似乎从持有指针的变量继承了可变性,这与示例中这两种可变性状态是独立的引用不同! Box::new 应该是这样工作的吗?如果是这样,我如何创建指向存储在不可变变量中的堆上可变数据的指针值?
【问题讨论】:
标签: pointers reference rust immutability