zoukankan      html  css  js  c++  java
  • Effective C++ 条款八 别让异常逃离析构函数

      class DBConn //这个class用来管理DBConnction对象
      {
      public:
     
          //自己设计一个新的DBConn接口   方法3
          void close()
          {
              db.close();
              closed = true;
          }
     
     
          ~DBConn() //确保数据库连接总是会被关闭
          {
             //db.close();
     
              if (!closed)
              {
                  try
                  {
                      db.close();
                  }
                  catch()
                  {
                       //制作运转记录,记下对close的调用失
                  }
              }
          }
      protected:
      private:
          DBconnection db;
          bool closed;
      };
     
      //假如调用析构函数发送错误,导致异常。析构函数会传播该异常,这时该怎么办?
      //
     
      DBConn::~DBConn
      {
          try 
          {
              db.close();
          }
          catch ()
          {
              //制作运转记录,记下对close的调用失败   方法1
             // abort(); //终止某个进程               方法2
     
          }
      };

    记住:

             1析构函数绝对不要吐出异常。如果一个被析构的函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吐下他们或结束程序。

          2、如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(不是在析构函数中)执行该操作。

  • 相关阅读:
    在AE中通过SDE添加图层(转)
    上一视图下一视图功能实现(C#+SuperMap Objects)
    [Python入门及进阶笔记]Python基础内置函数小结
    Javascript小球
    64位centos下安装python的PIL模块
    [Python入门及进阶笔记]Python基础集合小结
    C语言的那些小秘密之【链表(二)】
    巴斯卡三角形
    [Python入门及进阶笔记]Python基础数字处理相关模块
    C语言的那些小秘密之【链表(一)】
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3915344.html
Copyright © 2011-2022 走看看