Rust 学习笔记(28)-Rc

参考章节《Rust 程序设计语言》第15.4章 Rc<T> 引用计数智能指针

Rust 有一个叫做 Rc<T> 的类型。其名称为 引用计数(reference counting)的缩写。
引用计数意味着记录一个值引用的数量来知晓这个值是否仍在被使用。如果某个值有0个引用,就代表没有任何有效引用并可以被清理。

书上叫它引用计数智能指针,我更喜欢把它叫做可克隆型智能指针

一想到可克隆就能想到Rc::clone,就能想到多有权,就能想到引用计数 (PS:这只是我的叫法,大家可根据自己的理解随意发挥)

Rust 学习笔记(26)-Deref trait

参考章节《Rust 程序设计语言》第15.2章 通过 Deref trait 将智能指针当作常规引用处理

我们可以像使用常规引用一样使用 Box<T>,请看如下代码

1
2
3
4
5
6
fn main() {
    let x = 5;
    let y = Box::new(x);

    assert_eq!(5, *y); // 对 y 做解引用, 我们可以像使用常规引用一样使用 Box<T>, Rust 底层实际做了 *(y.deref()) 操作
}

在之前的章节中我们说,智能指针就是一个结构体,那为什么我们可以对结构体* 解引用运算呢?答案就是 Deref trait

实现 Deref trait 允许我们重载 解引用运算符 *。通过这种方式实现 Deref trait 的智能指针可以被当作常规引用来对待,可以编写操作引用的代码并用于智能指针。