博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NO.7:别让异常逃离析构函数
阅读量:6572 次
发布时间:2019-06-24

本文共 1370 字,大约阅读时间需要 4 分钟。

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

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

 

1 #include 
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 try19 {20 std::cout << "disconnect" << std::endl;21 22 }catch(...)23 {24 25 }26 27 }28 29 };30 31 32 //管理SQLConnect33 class abnormal34 {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 try57 {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 }

 

转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259549.html

你可能感兴趣的文章
C/C++中extern关键字详解
查看>>
证书吊销
查看>>
让height: 100%生效
查看>>
Linux文件查找命令find,xargs详述【转】
查看>>
python实战===教你用微信每天给女朋友说晚安【转】
查看>>
SQL 数据库知识点回顾
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
树状数组初探
查看>>
如何设置Java桌面程序界面外观
查看>>
VS2010版快捷键
查看>>
密码的故事
查看>>
栅格那点儿事(零)
查看>>
Linux系统信息查看命令大全
查看>>
windows cmd中查看某个命令所在的路径
查看>>
计算最长英语单词链
查看>>
Unix时间戳与C# DateTime时间类型互换
查看>>
cmd指令总结
查看>>
jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
查看>>
0029-求最小的数
查看>>