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,我觉得奇怪的是你在寻找其他用途而不是独特的…
- 什么时候使用哪种指针?
- @穆西:你需要回答的主要问题是所有权问题。在选择一个智能指针时没有什么其他的问题,这在我链接到的问题中得到了很好的回答。你链接到的问题我投了反对票(从早先开始),因为它没有显示出任何决定性的东西,并且询问了关于"数据"的错误问题。
- stackoverflow.com/questions/8706192/…在总体意义和意图上可能最接近我的问题。我没有看到stackoverflow.com/questions/8706192/…从提供的最接近的建议中研究或发布我的问题。
型
理论上,除非你知道你想分享,否则你应该对所有指针使用unique_ptr,在这种情况下,你应该使用shared_ptr。原因是unique_ptr的开销较小,因为它不计算引用。
但是,unique_ptr是可移动的,但不可复制,因此使用一个作为成员变量可能需要编写更多的代码(例如move构造函数),按值传递意味着需要使用std::move等。因此,有些人出于懒惰而使用shared_ptr,因为这很容易,而且性能差异可能对他们的应用程序不太重要。
最后,一个原始指针可以用于观察——指针的使用永远不会影响生命周期。仔细选择正确的指针类型可以让那些阅读代码的人很好地理解您在做什么。更多的,请参见Habor萨特的文章,C++风格的元素,特别是"不删除"部分。
- 型=default和隐式move成员可以很容易地处理额外的代码。
- 型如果在添加unique_ptr之前不需要显式移动构造函数,那么之后就不需要显式移动构造函数。唯一需要编写更多代码的情况是,您已经做了一些禁用隐式移动构造函数的事情。
- 型@deadmg I'm still waiting for=default in my compiler,but yes我还在编译器中等待,但是是的。
- 型@kategregory使用另一个编译器;-)