• NO.7:别让异常逃离析构函数


    1.析构函数绝对不要吐出异常,如果一个析构函数可能抛出异常,析构函数应该捕获任何异常,然后要么吞下它们或者退出程序

    2.如果用户需要对析构内的可能抛出异常的操作做出反应,则应该将操作放入除析构函数外的普通函数中

     1 #include <iostream>
     2 
     3 
     4 class SQLConnect
     5 {
     6 public:
     7     static SQLConnect &creat()
     8     {
     9         static SQLConnect obj;
    10         return obj;
    11     }
    12 
    13     //...
    14     //...
    15     void close()
    16     {
    17         //用户处理
    18         try
    19         {
    20             std::cout << "disconnect" << std::endl;
    21 
    22         }catch(...)
    23         {
    24 
    25         }
    26 
    27     }
    28 
    29 };
    30 
    31 
    32 //管理SQLConnect
    33 class abnormal
    34 {
    35 private:
    36     SQLConnect &obj_;
    37     bool closed_;
    38 public:
    39     abnormal(SQLConnect &obj) : obj_(obj), closed_(false)
    40     {
    41 
    42     }
    43 
    44 
    45     //最好定义一个外部close函数,给予用户处理异常的机会
    46     void ab_close()
    47     {
    48         //如果这里出现异常,SQLConnect会做处理
    49         obj_.close();
    50         closed_ = true;
    51 
    52     }
    53 
    54     ~abnormal()
    55     {
    56         try
    57         {
    58             if(!closed_)
    59                 obj_.close();
    60 
    61         } catch (...)
    62         {
    63             //做一些信息处理,异常信息
    64 
    65             //方式1,直接结束程序,防止出现 "不明确定义" 行为
    66             std::abort();
    67 
    68             //方式2,只做一些信息处理,不做任何退出程序(退下异常)
    69 
    70         }
    71 
    72 
    73     }
    74 
    75 
    76 };
    77 
    78 
    79 int main(int argc, char **argv)
    80 {
    81     abnormal obj(SQLConnect::creat());
    82     return 0;
    83 }
  • 相关阅读:
    python 可迭代对象与迭代器
    linux与linux远程桌面
    get return value of python in shell
    python反汇编函数字节码
    celery.backends.base.NotRegistered.
    supervisor process management
    Kafka的Log存储解析
    kafka config
    Chanel
    PowerPoint的公式
  • 原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259549.html
Copyright © 2020-2023  润新知