Rust 学习笔记 19:智能指针 (Smart Pointers)
Rust 学习笔记 19:智能指针 (Smart Pointers) “Pointer, I choose you!” 在 C++ 中,为了管理内存,我们有 unique_ptr 和 shared_ptr。 Rust 也有类似这一套,而且它是内存安全模型的重要补充。 普通引用 &T 和 &mut T 只是单纯的借用,不拥有数据。 而智能指针通常拥有它们指向的数据。 1. Box 最简单的智能指针。它把数据分配在堆上,栈上只留一个指针。 1let b = Box::new(5); 2println!("b = {}", b); 用途: 当类型大小在编译期无法确定时(比如递归类型 Cons List)。 当你拥有大量数据,想转移所有权但不想拷贝数据时。 Trait Objects (Box<dyn Trait>)。 2. Deref 和 Drop Trait 智能指针之所以"智能",是因为它们实现了: Deref Trait:允许像普通引用一样使用解引用运算符 *。这就是为什么 *b 能取到 5。 Drop Trait:允许自定义在清理时运行的代码(析构函数)。 3. Rc (引用计数) Rc (Reference Counting) 允许数据有多个所有者。 比如图结构,一个节点可能被多条边指向。 1let a = Rc::new(5); 2let b = Rc::clone(&a); // 引用计数 +1 3let c = Rc::clone(&a); // 引用计数 +1 Rc::clone 不会深拷贝数据,只会增加引用计数。当所有 Rc 都离开作用域,计数归零,数据才被释放。 注意:Rc 只能用于单线程。多线程要用 Arc (Atomic Rc)。 ...