shr*_*sva 8 c++ smart-pointers auto-ptr shared-ptr
我听说自动指针拥有自己的对象,而共享指针可以有许多指向它们的对象.为什么我们不一直使用共享指针.
与此相关的是智能指针,人们可以将这个术语与共享指针互换使用.它们是一样的吗?
Cat*_*lus 18
std::auto_ptr
是一个过时的,已弃用的独占指针所有权实现.它已被std::unique_ptr
C++ 11 取代.独占所有权意味着指针由某些东西拥有,并且该对象的生命周期与所有者的生命周期相关联.
共享指针(std::shared_ptr
)实现共享指针所有权 - 只要存在对它的活动引用,它们就会使对象保持活动状态,因为没有单个所有者.它通常使用引用计数完成,这意味着它们具有额外的运行时开销而不是唯一指针.关于共享所有权的推理也比独立所有权的推理更困难 - 破坏点变得不那么确定了.
智能指针是一个术语,包含所有类似行为的类型,但添加(智能)语义,而不是原始T*
.这两个unique_ptr
和shared_ptr
是智能指针.