template <class T> class shared_ptr;
对象都已释放此所有权,则托管对象将被删除(通常通过调用::delete,但可以在构造时指定不同的删除器)。
shared_ptr
对象只能通过复制其值来共享指针所有权:如果两个shared_ptr是从相同的(非shared_ptr)指针构造(或创建)的,它们将都拥有该指针而不共享它,当其中一个释放它(删除其托管对象)而留下另一个指向无效位置时,会造成潜在的访问问题。
此外,shared_ptr
对象可以共享指针的所有权,同时又指向另一个对象。这种能力称为别名(请参阅构造函数),通常用于在拥有对象的同时指向成员对象。因此,一个shared_ptr
可能关联到两个指针
对象(那些用别名构造函数及其副本构造的对象)可能指向不同的对象。
一个shared_ptr
不拥有任何指针的
称为空shared_ptr。一个shared_ptr
指向任何对象的
称为空指针shared_ptr,并且不应被解引用。但请注意,一个空shared_ptr
不一定是一个空指针shared_ptr,一个空指针shared_ptr
不一定是一个空shared_ptr.
shared_ptr
对象通过运算符*和->来提供对它们指向的对象的访问,从而复制了有限的指针功能。出于安全原因,它们不支持指针算术。
一个相关的类weak_ptr,能够与shared_ptr对象共享指针,而不拥有它们。
成员类型 | 定义 | 说明 |
---|---|---|
element_type | 模板参数(T) | 被管理对象的类型 |