跳到主要内容

std::auto_ptr

定义于头文件 <memory>

C++11 中已弃用,C++17 中已移除
// 1)
template< class T > class auto_ptr;
// 2)
template<> class auto_ptr<void>;

auto_ptr 是一种智能指针,用于管理通过 new 表达式获得的对象的生命周期,并在 auto_ptr 本身被销毁时删除该对象。它可用于为动态分配的对象提供异常安全性,以及在函数之间传递动态分配对象的所有权。

复制 auto_ptr 会复制指针并转移所有权:auto_ptr 的复制构造和复制赋值都会修改其右侧参数,并且“复制”与原始对象不相等。由于这些不寻常的复制语义,auto_ptr 不能放在标准容器中。

建议使用 std::unique_ptr 来代替 auto_ptr。(自 C++11 起)

  1. 提供了 void 类型的特化,它声明了 typedef 元素类型,但没有成员函数。

文档中多次提及一个额外的类模板 auto_ptr_ref。它是一种实现定义的类型,持有 auto_ptr 的引用。允许实现为该模板提供不同的名称,或以其他方式实现返回它或接受它作为参数的函数。

成员类型

公有成员元素类型T

成员函数

公有成员(构造函数)创建一个新的 auto_ptr
(公共成员函数)
公有成员(析构函数)销毁 auto_ptr 和所管理的对象
(公共成员函数)
公有成员operator=从另一个 auto_ptr 转移所有权
(公共成员函数)
公有成员operator auto_ptr<Y>
operator auto_ptr_ref<Y>
将管理的指针转换为不同类型的指针
(公共成员函数)

观察者

公有成员get返回指向所管理对象的指针
(公共成员函数)
公有成员operator*
operator->
访问所管理的对象
(公共成员函数)

修改器

公有成员reset替换托管对象
(公共成员函数)
公有成员release释放对所管理对象的所有权
(公共成员函数)

std::auto_ptr

定义于头文件 <memory>

C++11 中已弃用,C++17 中已移除
// 1)
template< class T > class auto_ptr;
// 2)
template<> class auto_ptr<void>;

auto_ptr 是一种智能指针,用于管理通过 new 表达式获得的对象的生命周期,并在 auto_ptr 本身被销毁时删除该对象。它可用于为动态分配的对象提供异常安全性,以及在函数之间传递动态分配对象的所有权。

复制 auto_ptr 会复制指针并转移所有权:auto_ptr 的复制构造和复制赋值都会修改其右侧参数,并且“复制”与原始对象不相等。由于这些不寻常的复制语义,auto_ptr 不能放在标准容器中。

建议使用 std::unique_ptr 来代替 auto_ptr。(自 C++11 起)

  1. 提供了 void 类型的特化,它声明了 typedef 元素类型,但没有成员函数。

文档中多次提及一个额外的类模板 auto_ptr_ref。它是一种实现定义的类型,持有 auto_ptr 的引用。允许实现为该模板提供不同的名称,或以其他方式实现返回它或接受它作为参数的函数。

成员类型

公有成员元素类型T

成员函数

公有成员(构造函数)创建一个新的 auto_ptr
(公共成员函数)
公有成员(析构函数)销毁 auto_ptr 和所管理的对象
(公共成员函数)
公有成员operator=从另一个 auto_ptr 转移所有权
(公共成员函数)
公有成员operator auto_ptr<Y>
operator auto_ptr_ref<Y>
将管理的指针转换为不同类型的指针
(公共成员函数)

观察者

公有成员get返回指向所管理对象的指针
(公共成员函数)
公有成员operator*
operator->
访问所管理的对象
(公共成员函数)

修改器

公有成员reset替换托管对象
(公共成员函数)
公有成员release释放对所管理对象的所有权
(公共成员函数)