zoukankan      html  css  js  c++  java
  • 《Effective C++》资源管理:条款13-条款17

    条款13:以对象管理资源

    • 为了防止资源泄漏,请使用RAII(Resource Acquisition Is Initialization)对象,在构造函数里面获得资源,在析构函数里面释放资源
    • auto_ptr,shared_ptr,unique_lock都是RAII类。
      • 一个对象只能由单一auto_ptr指向,不可让多个auto_ptr同时指向同一对象。
      • 通过copy构造函数或者copy assignment操作符赋值auto_ptr,被复制的auto_ptr会变成null,复制所得的auto_ptr会获得资源的唯一使用权。
      • STL容器不得使用auto_ptr作为模板类型。

    条款14:在资源管理类中小心coping行为

    • 常见的RAII对象copy行为
      • 禁止copy
      • 引用计数
      • 深度复制
      • 转移资源拥有权

    条款15:在资源管理类中提供对原始资源的访问

    - APIs 往往要求访问原始资源,所以RAII class 应该提供一个获取其所管理资源的接口(如shared_ptr的get()函数)。
    - 可通过显示和隐式接口对原始资源的访问,显示比较安全,隐式方便客户。
    
    //隐式转换
    class raiiclass {
    public:
        ...
        operate raiiclass() const {return res;}
        ...
    private:
        rawres res;
    }
    
    

    条款16:成对使用new和delete时要采取相同形式

    - new中使用[],必须在相应的delete中使用[]
    - nem中未使用[],delete中也不可以使用[]
    

    条款17:以独立语句将newed对象置入智能指针

    以独立语句将newed对象存储于智能指针内,防止“资源被创建(new过程)”和“资源被转化为管理对象”两个时间点可能发生异常干扰。

    process(new Widget, priority);
    
    //独立语句将newd对象存入智能指针
    shard_ptr<Widget> p(new Widget);
    process(p, priority);
    
  • 相关阅读:
    DataTable常用操作总结[转帖]
    Jquery实现淡入淡出效果
    在自定义Server Control中捆绑JS文件 [转帖]
    ASP.NET利用String.Join以分隔符號來串連集合資料 [转帖]
    fork()的一些测试
    大端小端表示法 && GAS对过程的实现
    GAS中流程控制的实现,for, while, if, switch
    一个看起来奇怪的C++程序 && c++操作符重载
    修改函数的返回地址
    stl algorithm sort ,unique
  • 原文地址:https://www.cnblogs.com/narjaja/p/10176239.html
Copyright © 2011-2022 走看看