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

  • 相关阅读:
    负载均衡算法
    .NET Core 如何上传文件及处理大文件上传
    ado.net 批量添加 更新 删除
    asp.net mvc session锁问题
    C# Cache 设定过期时间的方法
    C# 开源项目
    Linux上 发布.Net Core
    Roslyn
    .net core 基础知识
    神经网络基础
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3915344.html
Copyright © 2011-2022 走看看