More effective c++ 11(禁止异常(exceptions)流出destructors之外)

    当对象被exception处理机制------也就是exception传播过程中的stack------unwinding(栈展开)机制-----销毁。

    当destructor被调用时,可能有一个exception正在作用之中。可惜的是我们无法在destructor内区分这些状态。于是,必须在保守的假设下(假设当时有个exception正在作用中)撰写你的destructors。因为如果控制权基于exception的因素离开destructor。而此时正有另一个exception处于作用状态,C++会调用terminate函数。此函数会将程序立即结束掉,甚至不等局部对象被销毁。

   简单的说,比如 一个 destructor fun1()调用的时候会抛出一个exception,但是这个函数本身,是因为另外一个exception引起的,此时terminate()函数就被调用了...game over!!

 

下面看一个简单的代码分析:

类B的析构函数的exception是由于一个异常引发的,因为会导致 terminate函数的调用。。。程序因此over!

为了解决这个问题,我们必须阻止 异常抛出析构函数之外,只需要把B类的析构函数改为如下就可以了

 

在析构函数内部,捕获处理所有的异常!而且,如果不这样做,不但会引发terminate的调用,也会使得destructor执行不全。因为我们完全有必要----------禁止异常(exceptions)流出destructors之外-------把expection消灭在destructor内!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值