对于C++,有一个相似的,非常流行的question,但是我找不到Rust的相似问题。

那么,Rust中BoxRcRefRefMut(其他?)的用例是什么?

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

我知道《 rust 皮书》非常非常彻底地解释了它,但是我希望在这个主题上有一个简洁,快速的“备忘单”,也许本书中缺少一些真实的例子。

最佳答案



好的,我们开始:

用最简单的术语

  • Box,当您有一个要保留在堆上的对象时使用。在以下情况下使用方框
  • 您要own a dynamically sized object
  • 您想将对象泄漏到 'static lifetime
  • 您要生成一个ffi pointer
  • 您要制作recursive types
  • 很难确定对象的生存期时使用Rc。这是过度使用的懒惰迹象,并且在一定程度上破坏了终生目的。
  • 当您尝试访问 Ref 的内容时,
  • RefMutRefCellmutable references to many objects in a hashmap生成的对象。 RefCell将在运行时而不是编译时跟踪其对象的借用状态,因此有点像生存期。例如,当您需要 Arc 时,通常可以使用它。
  • 尝试在线程边界上共享对象时,
  • 可以与 RwLock (除以下内容外,基本上与RefCell一起使用)或 Mutex 与ojit_a一起使用。他们页面上的示例将向您展示如何使用它们,以及为什么它们比使用Rc<RefCell<T>>模式重要。

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

    这与为什么语言(生命周期)中内置的工具对Rust如此重要,为什么它们完成RcRefCell可以完成的所有任务却没有性能上的缺点以及C/C++所做的事情没有UB的机会有关。

    关于rust - 什么时候应该使用智能指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58885209/

    10-12 15:06
    查看更多