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

努尔伯·阿尔皮斯巴耶夫(Nurbol Alpysbayev)

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

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

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

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

乐观桃子

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

好的,我们开始:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么时候应该使用智能指针来保存数组?

来自分类Dev

在设计方面和编写库时,什么时候应该使用指针作为参数,什么时候不应该使用指针?

来自分类Dev

我什么时候应该使用`sparse`?

来自分类Dev

什么时候应该使用静态方法?

来自分类Dev

什么时候应该使用“ .Value”

来自分类Dev

什么时候应该使用atexit()?

来自分类Dev

什么时候应该使用JetCreator或SoundPool?

来自分类Dev

什么时候应该使用deinit?

来自分类Dev

什么时候应该使用const&?

来自分类Dev

什么时候应该使用LinearSVC或SVC?

来自分类Dev

什么时候应该使用Firebase Transactions

来自分类Dev

我什么时候应该使用EventEmitter?

来自分类Dev

什么时候应该使用“ ngProjectAs”属性?

来自分类Dev

什么时候应该使用呢?

来自分类Dev

什么时候应该使用iter函数?

来自分类Dev

我什么时候应该使用.copy()

来自分类Dev

什么时候应该使用并行编程?

来自分类Dev

什么时候应该使用subshell与`xargs`?

来自分类Dev

什么时候应该使用atexit()?

来自分类Dev

什么时候应该使用invokeCFClientFunction()函数?

来自分类Dev

什么时候应该使用RequireJS?

来自分类Dev

什么时候应该使用deinit?

来自分类Dev

什么时候应该使用<或<()或<<和>或>()?

来自分类Dev

我什么时候应该使用GROUP BY?

来自分类Dev

什么时候应该使用函数?

来自分类Dev

什么时候在Qt中使用指针?

来自分类Dev

什么时候应该使用memcpy,什么时候应该使用memmove?

来自分类Dev

什么时候应该使用Microsoft.Owin实现,什么时候应该使用AspNetCore?

来自分类Dev

什么时候应该使用memcpy,什么时候应该使用memmove?

Related 相关文章

热门标签

归档