直接回答Box<T> 是堆分配的唯一所有权指针,用在:递归类型需要已知大小(链表节点)、大对象避免栈拷贝、trait object 装箱。Rc<T> 是单线程共享所有权,引用计数归零才析构。Arc<T>Rc 的线程安全版,原子计数,跨线程共享数据的标准件。Cow<'a, T>(clone-on-write)表示"可能是借用、可能是拥有",只在需要修改时才克隆——解析场景返回切片零拷贝,遇到转义才拥有。

展开解析:选型看所有权语义而非性能:谁拥有数据?一个主人→Box 或直接栈上;多个主人单线程→Rc;多线程→Arc;读多写少想省拷贝→Cow。常见组合:Arc<Mutex<T>> 共享可变,Rc<RefCell<T>> 单线程等价物。两个高频坑:其一,Rc 互相引用形成环造成泄漏,需要 Weak 打破(树结构的父指针);其二,过度使用 Arc——很多"需要 Arc"的场景用作用域线程(std::thread::scope)或借用重构就能消失。Arc 计数是原子的,高并发下频繁 clone/drop 也有可测量的开销,热路径上考虑传引用或 Arc::clone 批量化。

追问方向:Weak 如何使用与升级?Box 为什么常与 Pin 搭配?Cow 在 API 设计上怎么判断返回值类型?

(约 440 字)