zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    3.不同类型变量存取
    2.Scanner的应用
    helloworld
    针对搜狗网址导航评论
    第二阶段第三次站立会议
    第二阶段第二次站立会议
    软件工程概论学习进度条05
    人月神话阅读笔记02
    第二阶段第一次站立会议
    第八次站立会议
  • 原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259549.html
Copyright © 2011-2022 走看看