J-b*_*bob 3 c++ smart-pointers shared-ptr unique-ptr
我目前正在学习C ++中的unique_ptr和shared_ptr类型。智能指针比原始指针的优势显而易见,并且有很多解释说明为什么您应该首选原始指针而不是原始指针。我正在努力理解的是,为什么您会特别选择使用unique_ptrovershared_ptr?
据我所知,从程序员的角度(忽略实现)来看,unique_ptrjust似乎是a的特殊情况版本,shared_ptr其中引用计数限制为一个。因此,如果我创建了一个shared_ptr并且仅创建了一个引用,那么我基本上具有a的效用unique_ptr(shared将来可以使用该零件)。
那么,unique_ptr给您带来什么好处呢?我应该承认,我是作为Java程序员来处理这个问题的,并且与shared_ptrJava的工作方式差不多。
一个
unique_ptr似乎只是一个特殊情况下的版本shared_ptr,其中引用计数被限制在一个
这是不正确的,这就是为什么要使用一个或另一个的关键所在。A shared_ptr是参考计数指针。为了使其具有线程安全性,它使用原子计数器作为引用计数。因此,对于a来说,shared_ptr您有额外的开销来存储参考计数器,再加上在影响它的所有函数中检查/操纵该计数器的执行开销。这种开销会对性能产生明显影响
unique_ptr相反,A 是非引用计数指针。它可以复制而无需引用计数器,因为它不可复制。这就意味着从new本质上讲,这是一个零成本的抽象delete。
因此,如果您永远不需要共享所有权,或者只需将其从一个地方移到另一个地方,并且需要自我管理,那么您就需要一个unique_ptr。这涵盖了绝大多数的指针用例。当您确实需要共享所有权时,可以继续使用shared_ptr,但要了解,共享所有权会导致性能下降。