[Rust]指针

Box<T>

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

Rc<T>

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

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

Cell<T>

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

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

RefCell<T>

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

组合使用

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容