Rust常用智能指针汇总

目前rust学习已经持续很长时间了。但是,最近在学习嵌入式rust后,越来越来习惯使用裸指针的代码了。这是个不好的习惯。为此,今天特意将rust标准库中的常见智能指针进行一下总结。

偏上层应用的智能指针

智能指针 说明 Sync版本
Cell<T> 内部可变性,一般要求T:Copy
RefCell<T> 内部可变性,一般不要求T:Copy RwLock<T>
OnceCell<T> 只能设置(变更)一次的内部可变性 OnceLock<T>
LazyCell<T, F> 延迟初始化 LazyLock<T,F>
Box<T> 将值分配到堆上
Vec<T> 动态数组
Rc<T> 引用计数实现的多所有者 Arc<T>
Cow<'a, B> 写时复制

偏底层的智能指针(如无特殊说明,下列指针都不会执行Tdrop

智能指针 说明 Sync版本
UnsafeCell<T> 内部可变性的基础,可以对外提供*mut T,会执行drop
ManuallyDrop<T> 禁止编译器自动调用Tdrop
MaybeUninit<T> 可能没有初始化的空间
NonNull<T> 非0指针且协变的*mut T
Cell<T>RefCell<T>

Cell<T>是毫无任何的运行时消耗,是通过交换内外的值实现内部可变性。主要针对简单类型。

RefCell<T>是存在运行时检查借用规则的消耗,是通过提供内部值的可变引用实现的内部可变性。

使用 Hugo 构建
主题 StackJimmy 设计