关于 Rust 所有权模型的一次讨论
我
Rust 的所有权和借用规则我总是搞混,能不能用几句话讲清楚核心思路?
Claude
核心就三条规则:每个值只有一个所有者;所有权可以转移(move);同一时间要么一个可变借用,要么多个不可变借用。编译器在编译期就检查这些规则,所以运行时不需要垃圾回收。
我
那 Box<T>、Rc<T>、Arc<T> 分别用在什么场景?
Claude
Box<T>:单一所有权,把数据放到堆上,常用于递归结构或大小编译期未知的类型。Rc<T>:单线程下的共享所有权(引用计数),多个地方需要只读访问同一份数据时用。Arc<T>:Rc的线程安全版本,多线程共享时用,通常配合Mutex/RwLock实现可变共享。