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

本文共 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

你可能感兴趣的文章
我的友情链接
查看>>
Spring Boot 应用教程
查看>>
嵌入式Linux裸机开发(五)——SDRAM初始化
查看>>
Mysql采坑只utf8
查看>>
Pdf Convert Image 的解决方案
查看>>
做一个项目时遇到中文乱码,于是在入口文件加了个header("Content-type:text/html;charset=utf-8");结果一刷新网页就自动下载本网页文件;...
查看>>
【巧妙消维DP】【HDU2059】龟兔赛跑
查看>>
(转)软件开发和团队”最小模式”初探2-6人模型(上)
查看>>
泛型类、泛型方法、类型通配符的使用
查看>>
知识分析作业(二)-----朴素贝叶斯
查看>>
2012CSU_ACM集训中期检测 简要题解
查看>>
DOS命令如何进入指定的下一级目录?
查看>>
python——continue的应用
查看>>
java基础之二分法查找
查看>>
二分查找+数学 HDOJ 4342 History repeat itself
查看>>
网络流
查看>>
「小程序JAVA实战」小程序和后台api通信(28)
查看>>
11.redis连接
查看>>
asp.net 操作存储过程
查看>>
已结采购订单不显示
查看>>