std :: unique_ptr的推荐用法

Mus*_*shy 31 c++ smart-pointers unique-ptr c++11

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

我发现:

关于unique_ptr表演

我已经知道了:

  1. std::unique_ptr 是用C++ 11开发的替代品 std::auto_ptr
  2. a std::unique_ptr没有引用计数和它所指向的"拥有"对象
  3. a没有复制/分配 std::unique_ptr
  4. 当我需要一个独特的指针时,std::unique_ptr就是结构

我想知道的是:

  1. 是否使用了std::unique_ptr更好的(除了唯一性)别的
    东西?在这种情况下我会得到什么?
  2. 如果是这样,在什么情况下何时?
  3. 鉴于需要移动语义,这会不会有std::unique_ptr利于
    整体?
  4. 如果std::shared_ptr在几乎所有情况下都能满足动态内存管理的需要,为什么我可以处理一std::unique_ptr件事(同样,
    除了唯一性)?

Kat*_*ory 10

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

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

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

  • == default和隐式move成员可以轻松处理额外的代码。 (2认同)