rust智能指针与内部可变性

rust的三种智能指针 Box Rc RefCell

一个智能指针,如果实现了Deref trait,相当于其内部数据的一个不可变引用

rust智能指针与内部可变性_第1张图片 

即 let mut ptr = Rc::new(5); ptr 等于 ptr.deref(),这应该是编译器会自动进行的

如果该智能指针实现了DerefMut trait,则该智能指针等价于其内部数据的一个可变引用

rust智能指针与内部可变性_第2张图片 

即 let mut ptr = Box::new(5); ptr 等于 ptr.deref_mut(),这应该是编译器会自动进行的

智能指针Box

智能指针Box持有其在堆上存储数据的所有权,等价于C++中的unique_ptr,在rust中实现了

Deref trait 和 DerefMut trait,所以可以对Box中的值进行访问和更改。

let mut ptr = Box::new(5);
let val = *ptr;    //访问
*ptr = 10;    //修改

智能指针Rc

智能指针Rc通过引用计数来实现多重所有权(每一个拥有Rc的都拥有其所有权,尽管它保存的是同一块堆内存),类似于C++中的shared_ptr。与shared_ptr不同的是,shared_ptr允许对其中的变量进行访问或修改(若其中变量不是const);而Rc没有实现

你可能感兴趣的:(rust)