[Rust]指针

Box

与我们通常熟知的指针概念相同,是指向堆中数据的指针。Box沿袭了Rust所有权机制:共享不可变,可变不同享,即, 同时只能存在一个可变引用或者多个不可变引用。

Rc

Rc 主要用于同一堆上所分配的数据区域需要有多个只读访问的情况,多个访问都对数据具有所有权

  • Rc包裹的T是不可变的,即不能修改T
  • Rc只能用于单线程
  • 由于要维护引用计数,存在运行时消耗

Cell

也是指向堆中数据的指针,但与Box不同,Cell允许修改T,同时,Cell支持多个借用修改T。

  • 有一个限制条件是T必须是实现了Copy trait的类型
  • Cell只能用在单线程

RefCell

RefCell去掉了T必须实现Copy trait的限制,不会在编译器检查,但运行时依然要保证同时只能有一个可变借用,否则线程崩溃。同时可以有多个不可变借用。

组合使用

Rc和RefCell可以组合使用,场景:同时存在多个不同所有者,每个所有者又可以随时修改其内容。

你可能感兴趣的:([Rust]指针)