1.不能用于数组
2.支持所有权概念,当一个auto_ptr对象被用于另一个对象初始化或赋值时,左边对象获取所有权,右边对象不在拥有所有权。
Auto_prt<int> p1(new int(1024));
Auto_ptr<int> p2(new int(2048));
P1 = p2;
P1在赋值前释放当前指向对象的所有权,赋值后p1拥有新对象所有权,对象为2048,p2不再拥有所有权
#include <iostream>
#include <memory>
using namespace std;
int main()
{
auto_ptr<int> p1(newint(1024));
auto_ptr<int> p2(newint(2048));
cout << *p1 <<'\t' << *p2 << endl;
//p1首先释放所有权,然后p1获取2048所有权,p2释放所有权赋值为0
p1 = p2;
cout << *p1 <<'\t' << p2.get() << endl;
//p3获取2048所有权,p1释放所有权赋值为0
auto_ptr<int>p3(p1.release());
cout << p1.get()<< '\t' << *p3 << endl;
return 0;
}
auto_ptr对象不能保存在容器中,因为容器要求复制或者赋值后,两个对象保存相同的值
3.auto_ptr不能用于非new动态分配的对象
4.两个auto_ptr不能指向同一个对象