unique_ptr相对于shared_ptr有什么优势

问题描述 投票:3回答:1

我目前正在学习C ++中的unique_ptrshared_ptr类型。智能指针比原始指针的优势显而易见,并且有很多解释说明为什么您应该首选原始指针而不是原始指针。我正在努力理解的是[[为什么您会特别选择在unique_ptr上使用shared_ptr

据我所知,从程序员的角度(忽略实现)

unique_ptr看起来像是shared_ptr的特例版本,其中引用计数限制为一个]

。因此,如果我创建一个shared_ptr并且只创建一个引用,则基本上可以使用unique_ptr的实用程序(将来可以使用shared部分)。那么unique_ptr有什么好处?我应该承认,我是作为Java程序员来处理这个问题的,并且shared_ptr似乎非常接近Java的工作方式。
c++ shared-ptr smart-pointers unique-ptr
1个回答
7
投票
unique_ptr似乎是shared_ptr的特例版本,其中引用计数限制为一个

这不是正确的,这就是为什么要使用一个或另一个的关键所在。 shared_ptr是参考计数指针。为了使其具有线程安全性,它使用原子计数器作为引用计数。因此,这意味着对于shared_ptr,您将拥有存储参考计数器的额外开销,以及在所有影响该计数器的函数中检查/操纵该计数器的执行开销。此开销会对性能产生明显影响

A unique_ptr相反,是一个非参考计数指针。它可以复制而无需引用计数器,因为它不可复制。这意味着对于指针newdelete基本上是零成本的抽象。

因此,如果您永远不需要共享所有权,或者只需将其移到另一个地方,并且需要自我管理,则需要unique_ptr。这涵盖了绝大多数的指针用例。当您确实需要共享所有权时,可以继续使用shared_ptr,但是您会因为共享所有权而遭受性能损失。

© www.soinside.com 2019 - 2024. All rights reserved.