编程语言
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>指向堆上的数据
什么是智能指针?
先说说我的一个直观感觉,智能指针就是一个有特殊功能的结构体,然后感兴趣可以去看看知乎对该问题的回答
编程语言
1605
4 分钟
参考章节《Rust 程序设计语言》第13.2章 使用迭代器处理元素序列
迭代器是遍历数据的一种方式
迭代器模式允许你对一个序列的项进行某些处理。
迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。
在 Rust 中,迭代器是 惰性的(lazy),这意味着在调用方法使用迭代器之前它都不会有效果。
先看一个例子
- 迭代器的第一种使用方法
1
2
3
4
5
6
7
8
9
10
|
fn main() {
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter(); // 创建一个迭代器
// 通过 for 循环的方式来使用迭代器
for val in v1_iter {
println!("Got: {}", val);
}
}
|