06-智能指针
智能指针 — Rust 语言之旅
内容来源 · Tour of Rust / Rust 语言之旅
原文链接: https://tourofrust.com/95_zh-cn.html
智能指针
除了能够使用&运算符创建对现有类型数据的引用之外, Rust 给我们提供了能够创建称为智能指针的类引用结构。
我们可以在高层次上将引用视为一种类型,它使我们能够访问另一种类型. 智能指针的行为与普通引用不同,因为它们基于程序员编写的内部逻辑进行操作. 作为程序员的你就是智能的一部分。
通常,智能指针实现了 Deref、DerefMut 和 Drop 特征,以指定当使用 * 和 . 运算符时解引用应该触发的逻辑。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| use std::ops::Deref;
struct TattleTell<T> {
value: T,
}
impl<T> Deref for TattleTell<T> {
type Target = T;
fn deref(&self) -> &T {
println!("{} was used!", std::any::type_name::<T>());
&self.value
}
}
fn main() {
let foo = TattleTell {
value: "secret message",
};
// dereference occurs here immediately
// after foo is auto-referenced for the
// function `len`
println!("{}", foo.len());
}
|