auto_ptr是老版本的智能指针,当时还没有unique_ptr,shared_ptr,weak_ptr,现在auto_ptr已经被废弃,他有了更好用的替代品unique_ptr,相对于他的后继者,它有以下几个缺点。
1.auto_ptr可以进行赋值和拷贝运算,但是他虽然名义上做的是赋值和拷贝,但是背后做的却是move语义做的事情,拷贝和赋值之后,源对象被置位空,这看起来十分反常。而unique_ptr只支持移动语义,使用起来更加清晰。
int main()
{
auto_ptr<int>ap1(new int(5)),ap2;
cout<<ap1.get()<<endl;
cout<<ap2.get()<<endl;
ap2=ap1;
cout<<ap1.get()<<endl;
cout<<ap2.get()<<endl;
unique_ptr<int>up1(new int(5)),up2;
cout<<up1.get()<<endl;
cout<<up2.get()<<endl;
up2=move(up1);
//up2=up1; 报错
cout<<up1.get()<<endl;
cout<<up2.get()<<endl;
}
2.auto_ptr无法作为容器元素。因为想作为STL