在 Rust 中,、 和 是最常用的三种智能指针(Smart Pointers)。它们都将数据存储在堆(Heap)上,但在所有权(Ownership)模型和线程安全方面有本质的区别。 以下是详细的对比和使用场景解析: --- 1. Box (独占所有权) 全称:Box (盒子) 核心概念:独占所有权(Unique Ownership)。同一时间只能有一个变量拥有该数据。 内存行为:数据存储在堆上,栈上只保留一个指向堆数据的指针。 开销:极小。除了堆分配本身的开销外,没有额外的运行时性能损耗(零抽象成本)。 线程安全:如果 是线程安全的(Send/Sync),那么 也是线程安全的。它可以被移动(Move)到另一个线程。 使用场景: 1. 编译时无法确定大小的类型:例如递归类型(链表、树),因为结构体中包含自身,必须使用指针来固定大小。 2. 大数据转移:当你拥有大量数据并希望在确保数据不被拷贝的情况下转移所有权时。 3. Trait 对象:当你只关心类型实现了什么 Trait,而不关心具体类型时(如 )。 代码示例: --- 2. Rc (引用计数 / 单线程共享) 全称:Refe...