← 学习中心

智能指针:Box、Rc 与 Arc

何时堆分配、何时共享、何时跨线程

本节你将能

说明 Box、Rc、Arc 各自解决的问题与适用边界。

直觉模型

Box 是「把东西放到堆上的盒子」;Rc 是单线程共享所有权的计数器;Arc 是可跨线程的原子计数版本。

核心要点

  • Box<T>:固定大小的间接层、递归类型、把大对象移到堆上
  • Rc<T>:单线程多所有者只读共享;写共享常配 RefCell
  • Arc<T>:多线程共享;与 Mutex/RwLock 组合做可变共享
use std::rc::Rc;
let a = Rc::new(String::from("shared"));
let b = Rc::clone(&a);
assert_eq!(Rc::strong_count(&a), 2);

常见误区

一上来就用 Arc<Mutex<T>>——先问是否真的需要共享可变与跨线程。

动手

用 Box 定义递归链表节点;再用 Rc 让两个变量共享同一字符串。

互动

完成测验;第三章将进入结构体、枚举与 Option/Result。

本节小结

前两章打通:语法起步 + 所有权/借用/生命周期/智能指针。后续章节在此之上构建抽象与并发。

智能指针:Box、Rc 与 Arc - 生命科学与前沿科技学习平台 | 必学必会