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