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 }
转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259549.html
NO.7:别让异常逃离析构函数相关推荐
- c++别让异常逃离析构函数
C++并不禁止析构函数吐出异常,但是并不鼓励这样做 1)原因 2)如何解决 1)原因 如果析构函数吐出异常,程序可能过早结束(比如某个函数调用发生异常,在回溯寻找catch过程中,每离开一个函数,这个 ...
- Effective C++ 条款08:别让异常逃离析构函数
今天学习Effective C++时,我发现对于这个08条款我并不敏感,可能在目前的学习coding中并没有遇到过,现在就打算创建一个空的博客记录自己今天学了的东西的标题,然后以后coding中若遇到 ...
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
C++ 用异常使得可以将正常执行代码和出错处理区别开来. 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用者清楚 ...
- C++中构造函数和析构函数可以抛出异常吗?
C++中构造函数和析构函数可以抛出异常吗? 一. 析构函数 参照<Effective C++>中条款08:别让异常逃离析构函数. 总结如下: 1. 不要在析构函数中抛出异常!虽然C++ ...
- frontcon函数用不了_C++复制构造函数与析构函数
想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C++语言程序设计课程一起过一遍C++的语法知识吧! 当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候 ...
- effective c++:virtual函数在构造函数和析构函数中的注意事项
effective c++:virtual函数在构造函数和析构函数中的注意事项 如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造 ...
- C++ 析构函数不要抛出异常
从语法上来说,析构函数可以抛出异常,但从逻辑上和风险控制上,析构函数中不要抛出异常,因为栈展开容易导致资源泄露和程序崩溃,所以别让异常逃离析构函数. 1.析构函数抛出异常的问题 析构函数从语法上是可以 ...
- Effective C++ -- 构造析构赋值运算
05.了解C++默默编写并调用哪些函数 编译产生的析构函数时non-virtual,除非这个类的基类析构函数为virtual 成员变量中有引用和const成员时,无法自己主动生成copy assign ...
- effective c++
2019独角兽企业重金招聘Python工程师标准>>> 条款1:视C++为一个语言联邦:C.Object-Oriented C++.Template C++.STL 对于内置类型pa ...
最新文章
- Numpy 多维数组变为常量、增加维度、元素复制、按块复制、横轴竖轴合并数组、连接数组
- mySQL优化 my.ini 配置说明
- X/Open DTP模型与XA协议的学习笔记
- maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案
- NET问答: 如何在 dynamic 集合上使用 Linq ?
- python unpack_ip地址处理每天10行python代码系列
- 没毛病!00后和90后成为暑期出游两大主力群体
- pcb文件转成原理图_初学PCB设计,到底该学习哪款软件?
- iOS开发之阿里百川、京东联盟、多多客联盟(拼多多)的接入
- Fliqlo:一款精致高逼格的翻页时钟屏保软件
- java工程师容易秃头吗_程序员更容易秃头?原因是什么?
- 大二暑假立秋学习总结
- google map 谷歌地图 更改当前定位图标icon大头钉小蓝点
- Unity学习笔记(六)——顶点动画
- 华为HCIA鲲鹏生态体系介绍
- 科研教育「双目视觉技术」首选!维视MV-VS220双目立体视觉系统开发平台
- 假设有四个作业,它们的提交、运行时间如下表所示。若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少?
- 网站推荐 | 那些小众却精美的网站
- 标准的产品设计工作流程
- 怎样用计算机演示声音的波形,利用音频APP演示声音特性的创新实验——智能手机上的中学物理实验创新之一...