什么时候应该使用智能指针?

Nur*_*yev 0 smart-pointers rust

对于C ++,有一个类似的,非常受欢迎的问题,但对于Rust,我找不到类似的现有问题。

那么,什么是用例BoxRcRefRefMut(其他人?)拉斯特?

这个问题的重要部分(对我个人而言):什么时候应该使用智能指针代替引用?

我知道《锈皮书》非常非常彻底地解释了它,但我希望在主题上有一个简洁明了的“备忘单”,其中可能包含本书中缺少的一些实际示例。

Opt*_*ach 5

什么是用例BoxRcRefRefMut(其他人?)拉斯特?

好的,我们开始:

  • Box用最简单的术语来说,当您有一个要保留在堆上的对象时使用。在以下情况下使用方框
  • Rc当很难确定对象的生存期时使用。这是过度使用的懒惰迹象,并且在一定程度上破坏了终生目的。
  • Ref以及当您尝试访问其内容时RefMut由a产生的对象RefCell。A RefCell将在运行时而不是编译时跟踪其对象的借用状态,因此它类似于生存期。例如,当需要对哈希图中的许多对象进行可变引用时,通常使用此方法。
  • Arc用于RwLock(基本上与以下内容相同RefCell)或Mutex尝试跨线程边界共享对象时使用。他们页面上的示例将向您展示如何使用它们,以及为什么它们比使用Rc<RefCell<T>>模式更重要。

锈本身还有一些“智能”指针,但是您必须知道的是,除非您使用了不安全的代码或直接使用了全局分配器,否则所有内容最终都会取消分配其内容。

这与为什么语言(生命周期)中内置的工具对Rust如此重要,它们能够完成所有RcRefCell完成但没有性能缺陷,并且C/C++在没有UB的机会的情况下进行操作的原因息息相关。