auto_ptr是c++标准库中的一种严格所有权型的智能指针,实现在backward/auto_ptr.h文件中
pro:
1、做临时变量时,不需要手动去释放资源
void f() { ClassA *p = new ClassA; ...... // 如果这抛出异常,还会有资源泄露的可能 delete p }
2、做成员变量时,不需要析构函数去处理
class A { private: auto_ptr<B> _p; // 类的析构函数会默认调用成员变量的析构函数 }
con:
1、在函数中使用时,要记得要么是在函数内终结资源,要么进行转移
void f(auto_ptr<A> p) { ....... // 函数退出时,会析构智能指针p。所以,如果资源没有被转移(传值调用/return),那么就被释放 }
2、不可以由多个智能指针管理同一个资源
void f() { A* p = new A; auto_ptr<A> ap1(p); auto_ptr<A> ap2(p); //由于是如果ap1被析构,那么资源已被释放;之后析构ap2,会有不可预测问题 }
3、不可以用来管理array,因为它内部是通过delete来释放资源,而不是delete []
4、不可以当成STL容器的元素
时间: 2024-10-06 12:55:49