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());
}
最后修改 August 21, 2026: 更新 (76fc81a2e)