auto_ptr的使用原则

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容器的元素

上一篇:自己设计大学排名-数据库实践


下一篇:AlwaysON同步的原理及可用模式