Nur*_*yev 0 smart-pointers rust
对于C ++,有一个类似的,非常受欢迎的问题,但对于Rust,我找不到类似的现有问题。
那么,什么是用例Box,Rc,Ref,RefMut(其他人?)拉斯特?
这个问题的重要部分(对我个人而言):什么时候应该使用智能指针代替引用?
我知道《锈皮书》非常非常彻底地解释了它,但我希望在主题上有一个简洁明了的“备忘单”,其中可能包含本书中缺少的一些实际示例。
什么是用例
Box,Rc,Ref,RefMut(其他人?)拉斯特?
好的,我们开始:
Box用最简单的术语来说,当您有一个要保留在堆上的对象时使用。在以下情况下使用方框
'static生命周期中Rc当很难确定对象的生存期时使用。这是过度使用的懒惰迹象,并且在一定程度上破坏了终生目的。Ref以及当您尝试访问其内容时RefMut由a产生的对象RefCell。A RefCell将在运行时而不是编译时跟踪其对象的借用状态,因此它类似于生存期。例如,当需要对哈希图中的许多对象进行可变引用时,通常使用此方法。Arc用于RwLock(基本上与以下内容相同RefCell)或Mutex尝试跨线程边界共享对象时使用。他们页面上的示例将向您展示如何使用它们,以及为什么它们比使用Rc<RefCell<T>>模式更重要。锈本身还有一些“智能”指针,但是您必须知道的是,除非您使用了不安全的代码或直接使用了全局分配器,否则所有内容最终都会取消分配其内容。
这与为什么语言(生命周期)中内置的工具对Rust如此重要,它们能够完成所有Rc并RefCell完成但没有性能缺陷,并且C/C++在没有UB的机会的情况下进行操作的原因息息相关。