zoukankan      html  css  js  c++  java
  • Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式

    1、在资源管理类中提供对原始资源的访问

        前几个条款很棒,它们是对抗资源泄露的壁垒,但很多APIs直接指向 资源,这个时候,我们需要直接访问原始资源。

        这里,有两种方法解决上述问题,我们可将RAII对象转换为原始资源。通过 显式转换与隐式转换。

        通常,tr1:: shared_ptr 和 auto_ptr 都提供一个get成员函数,用来执行显式转换,也就是返回智能指针内部的原始指针的复件。因为它也重载了指针取值操作符* –>。当然也可以通过隐式转换为底部原始指针。

         class font

    {

         FontHandle get() const

    {

      return f;

    } //FontHandle是资源,显式转换函数

    operator FontHandle() const

    {

      return f;

    }//隐式转换,可能会引起 “非故意之类型转换”

    }

    这两种方法之间的选择取决于RAII类被设计的特定工作。

    记住:

         APIs往往要求访问原始资源,所以每一个RAII都需要提供一个取得其管理的资源的方法。

         对原始资源的访问可能经由显式转换与隐式转换,一般而言显式转换比较安全,但隐式转换对客户比较方便。

    2、成对使用new 与 delete

        记住:

             new 数组时,直接调用delete[] +  数组名。

             即:如果你在new表达式中使用了[],必须在相应的表达式中也使用[],如果你在new表达式中没使用[],一定不要在相应的delete表达式中使用[]。

     

  • 相关阅读:
    一个故事讲清NIO
    select()/poll() 的内核实现
    一个滑块验证破解网站并带例子
    第7章 数据清洗和准备
    关系检验
    数据分析常用的方法总结
    python数据清洗
    描述性绘图
    pandas常用方法总结
    各种windows软件下载
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3924684.html
Copyright © 2011-2022 走看看