首页 > 技术文章 > auto_ptr的使用原则

johnchow 2015-06-10 18:42 原文

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

 

推荐阅读