构建复杂图结构与树结构必备。掌握堆分配 Box、单线程引用计数 Rc、跨线程 Arc 以及打破借用规则的 RefCell 运行时检查。
1. 智能指针家族概览
| 智能指针 | 内存位置 | 所有权 | 线程安全 | 检查时机 |
|---|---|---|---|---|
Box<T> | 堆 | 唯一所有者 | 取决于 T | 编译期 |
Rc<T> | 堆 | 共享所有权 | 否 (单线程) | 编译期 |
Arc<T> | 堆 | 共享所有权 | 是 (原子操作) | 编译期 |
RefCell<T> | 栈/堆 | 配合包装使用 | 否 | 运行期 |
use std::rc::Rc;
use std::cell::RefCell;
// 共享且可变的数据节点
let value = Rc::new(RefCell::new(42));
let a = Rc::clone(&value);
*a.borrow_mut() += 10;
println!("当前值: {}", value.borrow());