《Effective C++》条款08

条款08:别让异常逃离析构函数
考虑如下代码:

class Test
{
    public:
        ~Test(){...}   //假设这个析构函数会抛出一个异常;
};
void dosomething()
{
    vector<Test> v;
    ...             
}                     //v在这里自动销毁

当 v被销毁,v内所有Test都应该全部销毁。假设v内含有10个Test,而在析构第一个元素期间,有个异常被抛出。其它9个Test也应该全部被销毁(负责他们保存任何资源都会发生资源泄露),当第二个Test元素销毁时调用析构函数又抛出异常,现在有两个同时作用的异常,这对C++而言太多了。在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确的行为,本例中它会导致不明确行为,同理,其他stl库中的容器也会出现同样情况。

注意:析构函数绝对不要抛出异常。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值