rust的三种智能指针 Box Rc RefCell
一个智能指针,如果实现了Deref trait,相当于其内部数据的一个不可变引用
即 let mut ptr = Rc::new(5); ptr 等于 ptr.deref(),这应该是编译器会自动进行的
如果该智能指针实现了DerefMut trait,则该智能指针等价于其内部数据的一个可变引用
即 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++中的sha