不要让异常跑出析构函数

析构函数会在以下两种情况下被调用:

1.对象正常释放时。

2.当对象被异常处理机制传播过程中的stack_unwinding(栈展开)机制摧毁。

但是,析构函数被调用时,可能会有一个异常正在作用。我们是无法区分这些状态的。我们必须假设这种情况发生,因为

如果控制权基于异常的因素离开析构函数,而此时正有另一个异常处于作用状态,c++会调用terminate函数,结束程序。

不要让异常跑出析构函数的第二个理由:

如果异常从析构函数中跑出,且没有在析构函数中被捕捉,会导致析构函数执行不全,即执行到异常抛出就没有了,会导致

析构函数执行不完全,导致资源泄漏。

综上:有两个好理由支持“权利阻止异常跑出析构函数”:

1,.可以避免terminate在异常传播过程中终止程序。

2.协助确保析构函数完成应该做的事情。


摘录自more effective c++条款11’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值