C++中析构函数为什么不允许抛出异常
【C++中析构函数为什么不允许抛出异常】1.问题本身:
在语法上,C++允许在析构中抛出异常,但异常处理,本身就是为了处理构造失败的情况。
当一个对象构造失败而抛出异常时,我们应当利用析构函数,清理无效对象,并回收其资源,这是使程序健壮的重要手段。
2.问题分析:
从1可知,构造函数显然是可以抛出异常的。
进一步分析,在析构函数中抛出异常,会出现哪些情况:
(1)对象正常结束,在析构时,触发析构函数中的异常,打印异常信息,退出。在这种情况下,抛出异常并没有什么问题,析构函数的异常会被外面捕获;当然,如果外面的程序没有继续释放剩余的资源,可能会造成内存泄露。
(2)对象离开作用域之前,抛出异常,此时会调用析构函数,析构函数再抛出异常,此时之前的异常就不能被捕获了,而且会造成程序crash。
3.问题总结:
那么,是否就不可以在析构函数中使用异常?
答案显然是否,在某些情况下,我们不可避免的要在析构函数中使用异常,使程序依然健壮的关键的关键在于,不要让异常逃离析构函数。可以用try catch吞掉异常。
当然,更好的实践是,就不要在析构函数中使用异常。
推荐阅读
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- ffmpeg源码分析01(结构体)
- Flutter的ListView
- 《数据结构与算法之美》——队列
- c++基础概念笔记
- 什么是张拉膜结构雨棚(有哪些特点?)