类模板
<memory>

std::unique_ptr

non-specialized
template <class T, class D = default_delete<T>> class unique_ptr;
array specialization
template <class T, class D> class unique_ptr<T[],D>;
唯一指针
管理指针的存储,提供一种有限的垃圾回收机制,与内置指针相比开销几乎没有(取决于使用的删除器)。

这些对象能够获取指针的所有权:一旦它们获得所有权,它们就通过负责在某个时间点删除该对象来管理被指向的对象。

unique_ptr对象会在自身被销毁时,或者在它们的赋值操作(assignment operation)或显式调用unique_ptr::reset时,自动删除它们所管理的(使用删除器)的对象。

unique_ptr对象唯一地拥有其指针:没有其他机制负责删除该对象,因此不应有其他管理指针指向其管理的对象,因为一旦需要,unique_ptr对象删除其管理的对象,而不考虑其他指针是否仍然指向同一对象,从而使任何指向该对象的其他指针指向无效位置。

Aunique_ptr对象有两个组成部分
  • 一个存储的指针:指向它所管理的对象。它在构造时设置,可以通过赋值操作或调用成员reset来更改,并且可以使用成员getrelease单独访问以进行读取。
  • 一个存储的删除器:一个可调用对象,它接受一个与存储的指针类型相同的参数,并在被调用时删除被管理的对象。它在构造时设置,可以通过赋值操作来更改,并可以使用成员get_deleter单独访问。

unique_ptr对象通过运算符提供对其管理对象的访问,从而复制有限的指针功能*->(用于单个对象),或运算符[](用于数组对象)。出于安全原因,它们不支持指针算术,并且仅支持移动赋值(禁用拷贝赋值)。

模板参数

T
被管理对象的类型,别名为成员类型element_type.
D
用作删除器的可调用对象的类型,别名为成员类型deleter_type.
默认情况下,它是default_delete,一个无状态的仿函数,仅使用全局的delete进行操作,该类整体上不会对内置指针造成额外的开销。

成员类型

以下别名是unique_ptr.

成员类型定义说明
element_type第一个模板参数(T)被管理对象的类型
deleter_type第二个模板参数(D)存储的删除器的类型。
默认为default_delete<T>
指针remove_reference<D>::type::pointer如果此类型存在
T*否则
指针类型

成员函数


仅限于非特化的版本(单个对象):

仅限于运行时长度的数组特化版本:

非成员函数重载