Rust 智能指针


智能指针

Box, RC, RefCell

智能指针是数据结构,表现类似于指针,但也拥有额外的数据结构。

引用和智能指针的区别:引用只是只借用数据的指针,而智能指针则是拥有它们指向的数据。

Box

box值是放在堆上,而指向的堆上的数据的指针是留在栈上。

fn main() {
    // v存在栈上,5存在堆上,v指向5
    let v =  Box::new(5);
    println!("{}", v);
}

box使用场景

  1. 当有一个在编译时未知大小的类型,又需要在确切大小的上下文中使用这个类型值的时候(eg: 嵌套递归列表)。Box类型允许创建递归类型(自己插入自己)。

解引用

解引用多态与可变性交互:

  1. T: Deref时,从&T到&U。
  2. T: DerefMut时,从&mut T到&mut U。
  3. T: Deref时,从&mut T到&U

RC

use std::rc::Rc;
通过Rc允许程序的多个部分之间只读的共享数据,因为相同位置的多个可变引用可能会造成数据和不一致。(线程竞争)