编程语言
2040
5 分钟
参考章节《Rust 程序设计语言》第15.5章 RefCell<T> 和内部可变性模式
《Rust 程序设计语言》
上这一章,我实在是懒得吐槽
,举的例子太啰嗦(复杂),这一章不建议看这本书
关于这一章,我推荐看下面这本开源
书
参考章节《Rust语言圣经(Rust Course)》第3.4.5章 Cell 和 RefCell 内部可变性
编程语言
1092
3 分钟
参考章节《Rust 程序设计语言》第15.4章 Rc<T> 引用计数智能指针
Rust 有一个叫做 Rc<T>
的类型。其名称为 引用计数(reference counting)
的缩写。
引用计数
意味着记录一个值引用的数量
来知晓这个值是否仍在被使用。如果某个值有0
个引用,就代表没有任何有效引用并可以被清理。
书上叫它引用计数智能指针
,我更喜欢把它叫做可克隆型智能指针
一想到可克隆
就能想到Rc::clone
,就能想到多有权
,就能想到引用计数
(PS:这只是我的叫法,大家可根据自己的理解随意发挥
)
编程语言
855
2 分钟
参考章节《Rust 程序设计语言》第15.3章 使用 Drop Trait 运行清理代码
对于智能指针模式来说第二个重要的 trait
是 Drop
,其允许我们在值要离开作用域时执行一些代码。一些语言也把这个东西叫做 析构函数
编程语言
797
2 分钟
参考章节《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
的智能指针可以被当作常规引用来对待,可以编写操作引用的代码并用于智能指针。
编程语言
1138
3 分钟
参考章节《Rust 程序设计语言》第15.1章 使用Box <T>指向堆上的数据
什么是智能指针?
先说说我的一个直观感觉,智能指针就是一个有特殊功能的结构体
,然后感兴趣可以去看看知乎对该问题的回答