SuperAPI AI 工具集

rust-syntax-smart-pointers

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

本技能用于在 Rust 中选择合适的智能指针与共享所有权原语,覆盖 Box<T>、Rc<T>、Arc<T>、RefCell<T>、Cell<T>、OnceCell<T>、OnceLock<T>、LazyLock<T>、Weak<T> 及 Pin<T> 概览。各类型在堆分配、单线程与多线程引用计数、内部可变性和懒初始化上取舍不同,选错会导致内存泄漏、死锁、panic 或编译失败。

适用场景包括:递归类型或 dyn Trait 返回需要 Box;单线程或跨线程共享只读数据选 Rc 或 Arc;需要通过共享引用修改时在 Cell/RefCell 与 Mutex/RwLock/原子类型间取舍;需要懒初始化全局变量而不使用 static mut 或 lazy_static!;构建图、观察者或父子树时出现引用循环;以及理解 Future::poll 中 Pin<&mut Self> 的含义。

必要用法要点:优先选择满足需求的最低开销原语,不要把 Arc<Mutex<T>> 当作默认选择,计数器、标志等原始类型优先用原子类型。跨线程共享用 Arc::clone,单线程用 Rc::clone 以表明只增加引用计数。父子等图中,反向边(parent、观察者)用 Weak,正向边保持 Rc 或 Arc,避免环导致泄漏。RefCell 的 borrow/borrow_mut 守卫与 Mutex 守卫一样应尽量缩短作用域,重入代码可用 try_borrow。跨线程懒初始化在 1.70+ 用 OnceLock,1.80+ 可用 LazyLock(单线程为 LazyCell),取代外部 lazy_static! 与 once_cell。异步代码中不要跨 .await 持有 std::sync::Mutex 守卫,应使用 tokio::sync::Mutex。Pin 仅作标记理解,不要通过不安全方式从 Pin<&mut T> 取出 &mut T。

限制:资料未提供具体性能基准、完整方法签名与示例文件内容,相关细节暂未提供。