Rust 智能指针
智能指针
Box, RC, RefCell
智能指针是数据结构,表现类似于指针,但也拥有额外的数据结构。
引用和智能指针的区别:引用只是只借用数据的指针,而智能指针则是拥有它们指向的数据。
Box
box值是放在堆上,而指向的堆上的数据的指针是留在栈上。
fn main() {
// v存在栈上,5存在堆上,v指向5
let v = Box::new(5);
println!("{}", v);
}
box使用场景
- 当有一个在编译时未知大小的类型,又需要在确切大小的上下文中使用这个类型值的时候(eg: 嵌套递归列表)。Box类型允许创建递归类型(自己插入自己)。
解引用
解引用多态与可变性交互:
- 当
T: Deref<Target=U>
时,从&T到&U。 - 当
T: DerefMut<Target=U>
时,从&mut T到&mut U。 - 当
T: Deref<Target=U>
时,从&mut T到&U
RC
use std::rc::Rc;
通过Rc