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 }

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

NO.7:别让异常逃离析构函数相关推荐

  1. c++别让异常逃离析构函数

    C++并不禁止析构函数吐出异常,但是并不鼓励这样做 1)原因 2)如何解决 1)原因 如果析构函数吐出异常,程序可能过早结束(比如某个函数调用发生异常,在回溯寻找catch过程中,每离开一个函数,这个 ...

  2. Effective C++ 条款08:别让异常逃离析构函数

    今天学习Effective C++时,我发现对于这个08条款我并不敏感,可能在目前的学习coding中并没有遇到过,现在就打算创建一个空的博客记录自己今天学了的东西的标题,然后以后coding中若遇到 ...

  3. C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题

    C++ 用异常使得可以将正常执行代码和出错处理区别开来. 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用者清楚 ...

  4. C++中构造函数和析构函数可以抛出异常吗?

    C++中构造函数和析构函数可以抛出异常吗? 一.  析构函数 参照<Effective C++>中条款08:别让异常逃离析构函数.  总结如下: 1. 不要在析构函数中抛出异常!虽然C++ ...

  5. frontcon函数用不了_C++复制构造函数与析构函数

    想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C++语言程序设计课程一起过一遍C++的语法知识吧! 当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候 ...

  6. effective c++:virtual函数在构造函数和析构函数中的注意事项

    effective c++:virtual函数在构造函数和析构函数中的注意事项 如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造 ...

  7. C++ 析构函数不要抛出异常

    从语法上来说,析构函数可以抛出异常,但从逻辑上和风险控制上,析构函数中不要抛出异常,因为栈展开容易导致资源泄露和程序崩溃,所以别让异常逃离析构函数. 1.析构函数抛出异常的问题 析构函数从语法上是可以 ...

  8. Effective C++ -- 构造析构赋值运算

    05.了解C++默默编写并调用哪些函数 编译产生的析构函数时non-virtual,除非这个类的基类析构函数为virtual 成员变量中有引用和const成员时,无法自己主动生成copy assign ...

  9. effective c++

    2019独角兽企业重金招聘Python工程师标准>>> 条款1:视C++为一个语言联邦:C.Object-Oriented C++.Template C++.STL 对于内置类型pa ...

最新文章

  1. Numpy 多维数组变为常量、增加维度、元素复制、按块复制、横轴竖轴合并数组、连接数组
  2. mySQL优化 my.ini 配置说明
  3. X/Open DTP模型与XA协议的学习笔记
  4. maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案
  5. NET问答: 如何在 dynamic 集合上使用 Linq ?
  6. python unpack_ip地址处理每天10行python代码系列
  7. 没毛病!00后和90后成为暑期出游两大主力群体
  8. pcb文件转成原理图_初学PCB设计,到底该学习哪款软件?
  9. iOS开发之阿里百川、京东联盟、多多客联盟(拼多多)的接入
  10. Fliqlo:一款精致高逼格的翻页时钟屏保软件
  11. java工程师容易秃头吗_程序员更容易秃头?原因是什么?
  12. 大二暑假立秋学习总结
  13. google map 谷歌地图 更改当前定位图标icon大头钉小蓝点
  14. Unity学习笔记(六)——顶点动画
  15. 华为HCIA鲲鹏生态体系介绍
  16. 科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台
  17. 假设有四个作业,它们的提交、运行时间如下表所示。若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少?
  18. 网站推荐 | 那些小众却精美的网站
  19. 标准的产品设计工作流程
  20. 怎样用计算机演示声音的波形,利用音频APP演示声音特性的创新实验——智能手机上的中学物理实验创新之一...

热门文章

  1. 科普|深度解析5G与未来天线技术
  2. 世界人工智能发展究竟到了什么水平
  3. 胡小明:城市大脑与人脑不同的数据意识
  4. 深度学习在推荐系统上的应用
  5. 文武双全,AI 女神们的修炼手册!
  6. 一个类型思考了 8 年,依旧是最好的! | 每日趣闻
  7. 从入职到离职创业,我在谷歌、亚马逊的八年
  8. 血亏 1.5 亿、华为断供、Linux 之父怒删代码,2020 IT 大事记盘点
  9. AI“暴力美学”背后,预训练模型如何乘风破浪?
  10. 因为爱情,才有了思科