• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

 

posted on 2015-06-10 18:42  竹千代  阅读(221)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3