类模板
<memory>

std::shared_ptr

template <class T> class shared_ptr;
共享指针
管理指针的存储,提供有限的垃圾回收机制,可能与其他对象共享该管理。

对象shared_ptr类型具有拥有指针的能力,并共享该所有权:一旦它们获得所有权,指针的拥有者组将负责在最后一个释放该所有权时删除它。

shared_ptr对象在自身被销毁时,或在它们的数值通过赋值操作或显式调用shared_ptr::reset改变时,立即释放对它们共同拥有的对象的拥有权。一旦所有shared_ptr共享指针所有权的

对象都已释放此所有权,则托管对象将被删除(通常通过调用::delete,但可以在构造时指定不同的删除器)。

shared_ptr

对象只能通过复制其值来共享指针所有权:如果两个shared_ptr是从相同的(非shared_ptr)指针构造(或创建)的,它们将都拥有该指针而不共享它,当其中一个释放它(删除其托管对象)而留下另一个指向无效位置时,会造成潜在的访问问题。

此外,shared_ptr

对象可以共享指针的所有权,同时又指向另一个对象。这种能力称为别名(请参阅构造函数),通常用于在拥有对象的同时指向成员对象。因此,一个shared_ptr

可能关联到两个指针

  • 一个存储的指针,即它所说的指向的指针,以及它用operator*解引用的指针
  • 一个拥有的指针(可能共享),即所有权组负责在某个时候删除的指针,以及它将其计为使用的指针。

通常,存储的指针拥有的指针指向同一个对象,但别名shared_ptr

对象(那些用别名构造函数及其副本构造的对象)可能指向不同的对象。

一个shared_ptr

不拥有任何指针的

称为shared_ptr。一个shared_ptr

指向任何对象的

称为空指针shared_ptr,并且不应被解引用。但请注意,一个shared_ptr

不一定是一个空指针shared_ptr,一个空指针shared_ptr

不一定是一个shared_ptr.

shared_ptr

对象通过运算符*->来提供对它们指向的对象的访问,从而复制了有限的指针功能。出于安全原因,它们不支持指针算术。

一个相关的类weak_ptr,能够与shared_ptr对象共享指针,而不拥有它们。


模板参数

T
被管理对象的类型,别名为成员类型element_type.

成员类型

以下别名是...的成员类型shared_ptr.

成员类型定义说明
element_type模板参数(T)被管理对象的类型

成员函数


非成员函数

重载:

特定函数:

另见