繁体   English   中英

与 shared_ptr 相比,unique_ptr 有什么优势

[英]What is the advantage of a unique_ptr over a shared_ptr

我目前正在学习 C++ 中的unique_ptrshared_ptr类型。 智能指针相对于原始指针的优势是显而易见的,并且有很多解释为什么你应该更喜欢它们而不是原始指针。 我很难理解的是为什么你会特别选择使用unique_ptr而不是shared_ptr

据我所知,从程序员的角度来看(忽略实现) unique_ptr看起来就像shared_ptr的特例版本,其中引用计数限制为 one 因此,如果我创建了一个shared_ptr并且只创建了一个引用,那么我基本上就拥有了unique_ptr的实用程序(将来能够使用shared部分)。

那么unique_ptr给你带来什么好处呢? 我应该承认,我作为 Java 程序员来处理这个问题,而shared_ptr似乎非常接近 Java 的工作方式。

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

这不是真的,这也是你为什么要使用一个或另一个的症结所在。 shared_ptr是一个引用计数指针。 为了使其成为线程安全的,它使用原子计数器作为引用计数。 因此,这意味着对于shared_ptr ,您有存储引用计数器的额外开销,以及在影响它的所有函数中检查/操作该计数器的执行开销。 这种开销会对性能产生显着影响

相反, unique_ptr是非引用计数指针。 它可以在没有引用计数器的情况下逃脱,因为它不可复制。 这意味着它基本上是对newdelete指针的零成本抽象。

因此,如果您从不需要共享所有权,或者您可以将其从一个地方移动到另一个地方,并且您想要自我管理,那么您需要一个unique_ptr 这涵盖了绝大多数指针用例。 当您真正需要共享所有权时,您可以提前 go 并使用shared_ptr ,但要了解您会因共享所有权而遭受性能损失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM