std::auto_ptr<T>::auto_ptr
定义于头文件 <memory>
。
explicit auto_ptr( X* p = 0 ) throw(); (1)
auto_ptr( auto_ptr& r ) throw(); (2)
template< class Y >
auto_ptr( auto_ptr<Y>& r ) throw(); (3)
auto_ptr( auto_ptr_ref<X> m ) throw(); (4)
从指向要管理的对象指针构造 auto_ptr。
-
使用指针
p
构造 auto_ptr。 -
使用
r
中保存的指针构造 auto_ptr。将调用r.release()
来获取对象的所有权。 -
同 (2)。
Y*
必须可隐式转换为T*
。 -
使用
m
引用的 auto_ptr 实例中保存的指针构造 auto_ptr。将调用p.release()
来获取m
所持有的 auto_ptrp
的对象所有权。auto_ptr_ref 是一个实现定义的类型,它保存对 auto_ptr 的引用。std::auto_ptr
可隐式转换为此类型并从此类型赋值。实现允许提供具有不同名称的模板或以其他方式实现等效功能。
参数
p
- 指向要管理的对象指针 r
- 另一个 auto_ptr,用于转移对象的所有权 m
- 一个实现定义的类型,它保存对 auto_ptr 的引用
备注
提供了从 auto_ptr_ref 的构造函数和复制赋值运算符,以允许从无名临时变量复制构造和赋值 std::auto_ptr。由于其复制构造函数和复制赋值运算符接受非 const 引用作为参数,因此它们无法直接绑定 rvalue 参数。但是,可以执行用户定义的转换(该转换会释放原始的 std::auto_ptr),然后调用采用 auto_ptr_ref 作为值的构造函数或复制赋值运算符。这是移动语义的早期实现。