C15 智能指针
https://doc.rust-lang.org/book/ch15-00-smart-pointers.html
指针是一种通用概念, 指的是这一类变量, 它们的值存储了内存地址, 而这个内存地址 "指向" 其他数据(即其他数据所在的内存地址). 而最常见的指针就是前面提到的引用(通过 &
表示), 它们没有额外开销, 而功能仅仅是指向另外的数据.
而 智能指针 指的是一种数据结构, 它类似指针的作用, 但有额外的附加功能(通过其存储的元数据和对应能力).
在 Rust 标准库中有许多智能指针, 包括引用计数指针 Rc
, 原子引用计数指针 Arc
, String
, Vec<T>
等. 智能指针通常使用 struct
实现, 且通常都实现了 Deref
和 Drop
trait.
Deref
让智能指针使用时和使用引用方式一样, 而无需显式进行引用获取操作.
Drop
让我们可以自定义智能指针在出作用域后的行为.
由于智能指针种类众多, 且各种库中都包含自己实现的智能指针, 因此本章只挑选标准库中几个典型的来看:
Box<T>
: 用于在堆上分配内存Rc<T>
: 用于进行引用计数, 从而实现多 ownershipRefer<T>
和RefMut<T>
: 通过RefCell<T>
进行访问, 让运行时的 borrow check 成为可能.
此外, 本章还会讲 内部可变(interior mutability)
模式, 这种模式为一个不可变类型提供改变其内部值的接口. 同时本章还会讲在使用引用计数时的一个典型问题: 循环引用, 以及如何避免循环引用所造成的内存泄露.