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应该提供一个普通函数(不是在析构函数中)执行该操作。

  • 相关阅读:
    bzoj2438
    bzoj3040
    [AHOI2009]维护序列
    [JSOI2008]最大数
    洛谷3378堆模板
    洛谷1439
    洛谷2756
    bzoj1016
    洛谷1875
    [模板] 强连通分量
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3915344.html
Copyright © 2011-2022 走看看