std :: unique_ptr的推荐用法

时间:2013-03-18 12:30:17

标签: c++ c++11 smart-pointers unique-ptr

std::unique_ptr的具体用途是什么,何时以及如何最佳使用?

我发现:

About unique_ptr performances

我已经知道了:

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

    1. 使用std::unique_ptr更优先(除了唯一性)某事    其他?在这种情况下我会得到什么?
    2. 如果是这样,在什么情况下何时?
    3. 鉴于需要移动语义,这会使std::unique_ptr不那么有利 整体?
    4. 如果std::shared_ptr足以满足几乎所有的动态内存管理需求    情况,为什么我有一个std::unique_ptr问题(再次,其他)    比独一无二)?

1 个答案:

答案 0 :(得分:10)

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

但是,unique_ptr是可移动但不可复制的,因此使用一个作为成员变量可能需要您编写更多代码(例如移动构造函数),按值传递一个意味着您需要使用{ {1}}等等。因此,有些人会因为懒惰而使用std::move,因为它更容易,而且他们的应用程序的性能差异可能不大。

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