对于C++,有一个相似的,非常流行的question,但是我找不到Rust的相似问题。
那么,Rust中Box
,Rc
,Ref
,RefMut
(其他?)的用例是什么?
这个问题的重要部分(对我个人而言):什么时候应该使用智能指针来代替引用?
我知道《 rust 皮书》非常非常彻底地解释了它,但是我希望在这个主题上有一个简洁,快速的“备忘单”,也许本书中缺少一些真实的例子。
最佳答案
好的,我们开始:
用最简单的术语
Box
,当您有一个要保留在堆上的对象时使用。在以下情况下使用方框'static
lifetime Rc
。这是过度使用的懒惰迹象,并且在一定程度上破坏了终生目的。 Ref
的内容时,RefMut
和RefCell
是mutable references to many objects in a hashmap生成的对象。 RefCell
将在运行时而不是编译时跟踪其对象的借用状态,因此有点像生存期。例如,当您需要 Arc
时,通常可以使用它。 RwLock
(除以下内容外,基本上与RefCell
一起使用)或 Mutex
与ojit_a一起使用。他们页面上的示例将向您展示如何使用它们,以及为什么它们比使用Rc<RefCell<T>>
模式重要。 rust 本身还有一些“智能”指针,但是您必须知道的是,除非您使用了不安全的代码或直接使用了全局分配器,否则所有内容最终都会释放其内容。
这与为什么语言(生命周期)中内置的工具对Rust如此重要,为什么它们完成
Rc
和RefCell
可以完成的所有任务却没有性能上的缺点以及C/C++
所做的事情没有UB的机会有关。关于rust - 什么时候应该使用智能指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58885209/