智能指针

智能指针(smart pointers)是一类数据结构,它们的表现类似指针,但是也拥有额外的元数据和功能。

引用计数 (reference counting)智能指针类型,其允许数据有多个所有者。引用计数智能指针记录总共有多少个所有者,并当没有任何所有者时负责清理数据。

Rust 中,普通引用 和 智能指针 的一个额外的区别是引用是一类只借用数据的指针;相反,在大部分情况下,智能指针 拥有 它们指向的数据。

智能指针通常使用 结构体 实现。智能指针区别于常规结构体的显著特性在于其实现了 DerefDrop traitDeref trait 允许智能指针结构体实例表现的像引用一样,这样就可以编写既用于引用、又用于智能指针的代码。Drop trait` 允许自定义当智能指针离开作用域时运行的代码。

常用的一些智能指针:

  • Box<T>,用于在堆上分配值;
  • Rc<T>,一个引用计数类型,其数据可以有多个所有者;
  • Ref<T>RefMut<T>,通过 RefCell<T> 访问( RefCell<T> 是一个在运行时而不是在编译时执行借用规则的类型);

还会涉及 内部可变性(interior mutability)模式,这是不可变类型暴露出改变其内部值的 API。也会涉及 引用循环(reference cycles)会如何泄漏内存,以及如何避免。

1.Box

最后更新于