C++98引入了auto_ptr
auto_ptr:
**特点:**管理权限唯一,控制权限唯一<所有权唯一>
只有一个指针对象进行管理,剩下的都会失效.数据无法共享
不能在容器中保存auto_ptr,也不能从函数中返回auto_ptr.
上图所示是错误的,因为所有权是唯一的.
所以在C++11摒弃了auot_ptr:要避免因为潜在的内存问题导致程序崩溃.
auto_ptr的简单实现:
template<typename T>
class Auto_Ptr
{
public:
Auto_Ptr(T* ptr)//构造函数
:mptr(ptr)//初始化
{}
Auto_Ptr(Auto_Ptr<T>& rhs)//拷贝构造函数
{
mptr = rhs.Release();
}
Auto_Ptr<T>& operator=(Auto_Ptr<T>& rhs)//赋值运算符重载
//如果形参和this指针指向同一块内存,系统就会崩溃
{
if (this != &rhs)
{
delete mptr;
mptr = rhs.Release();
}
return *this;
}
~Auto_Ptr()
{
delete mptr;
mptr = NULL;
}
T& operator*()
{
return *mptr;
}
T* operator->()
{
return mptr;
}
private:
T* Release()
{
T* ptmp = mptr;
mptr = NULL;
return