47

a 的推荐用途是什么std::unique_ptr,具体在哪里、何时以及如何最好地使用它?

我发现:

关于 unique_ptr 表演

我已经知道:

  1. std::unique_ptr是在 C++11 中开发的,以替代std::auto_ptr
  2. astd::unique_ptr没有引用计数并且“拥有”它指向的对象
  3. 没有复制/分配std::unique_ptr
  4. 当我需要一个唯一的指针时,std::unique_ptr是转到结构

我想知道的:

  1. 使用std::unique_ptr比其他东西更可取的(除了唯一性)
    吗?在这种情况下我能得到什么?
  2. 如果有,在什么情况下,什么时候?
  3. 考虑到移动语义的需要,这是否会导致整体std::unique_ptr不利
  4. 如果std::shared_ptr在几乎所有情况下都足以进行动态内存管理,为什么我可以随意使用std::unique_ptr(同样,
    除了唯一性)?
4

1 回答 1

23

理论上,您应该使用unique_ptr所有指针,除非您知道要共享它,在这种情况下您应该使用shared_ptr. 原因是它unique_ptr的开销较少,因为它不计算引用。

但是,aunique_ptr是可移动的但不可复制,因此使用 one 作为成员变量可能需要您编写更多代码(例如移动构造函数),通过值传递 one 意味着您需要使用std::move等等。结果,有些人shared_ptr出于懒惰而使用它,因为它更容易,而且性能差异对于他们的应用程序可能并不显着。

最后,原始指针可以很好地观察-永远不会影响生命周期的指针使用。仔细选择正确的指针类型可以让那些阅读你的代码的人很好地理解你在做什么。有关更多信息,请参阅 Herb Sutter 的文章Elements of C++ Style,特别是“禁止删除”部分。

于 2013-03-18T12:40:30.607 回答