关于c ++:std :: unique_ptr的推荐用法

Recommended usage of std::unique_ptr

本问题已经有最佳答案,请猛点这里访问。

std::unique_ptr的推荐用途是什么,特别是在什么地方、什么时候以及如何最好地使用它?

我发现:

关于独特的表演

我已经知道:

  • EDCOX1〔0〕是在C++ 11中开发的,取代EDCX1〔2〕。
  • 一个std::unique_ptr没有引用计数并且"拥有"它指向的对象
  • 没有与std::unique_ptr一起复制/分配
  • 当我需要一个唯一的指针时,std::unique_ptr是go-to结构
  • 我想知道的是:

  • 使用EDOCX1[0]比某些东西更可取(唯一性除外)还有吗?在这种情况下我能得到什么?
  • 如果是,在什么情况下什么时间?
  • 考虑到移动语义学的需要,这是否会使std::unique_ptr不那么有利?总体而言?
  • 如果一个std::shared_ptr可以满足几乎所有情况,为什么我要处理一件事情而不是独特性?

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

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

    最后,一个原始指针可以用于观察——指针的使用永远不会影响生命周期。仔细选择正确的指针类型可以让那些阅读代码的人很好地理解您在做什么。更多的,请参见Habor萨特的文章,C++风格的元素,特别是"不删除"部分。