【博客9】析构函数未捕获异常引发的 “coredump“

今天记录一下:析构函数未捕获异常引发的 "coredump"

问题引发:以前看effective c++提到过:不要让异常逃离你的析构函数。原因是析构中如果抛出异常,那么往往是配合要析构其他有关对象,但是如果其他对象的析构中也抛出异常,这样会使得处理变得复杂,且得不到正确处理。今天在看有关c++陷阱的书时,再次提到了这个问题,就举书中例子,记录下为什么析构函数最好不要抛出异常:

代码如下:
在这里插入图片描述
测试结果:
在这里插入图片描述
结果分析:
析构中抛出的异常没有被捕获,会一直向上传递,直到c++调用标准库中的terminate,默认情况下terminate会调用abort函数结束程序,同时生产coredump。上述代码中,main函数在try块中抛出异常,在栈展开过程中调用my_test对象的析构函数,尝试销毁,但是很不幸,这个对象的析构也抛出异常,并且没有被捕获,导致了terminate的调用,从而引发abort调用,异常终止,并生成coredump。

好的做法:不要让异常逃离你的析构函数,但是因为析构函数没有返回值,所以不抛出异常,他没有其他办法来通告异常,所以如果非要抛出异常,建议在析构函数里捕获它吧,就不会造成多重异常引发的情况了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值