首页 > 其他 > 详细

11 禁止异常信息传递到析构函数外

时间:2021-08-23 08:44:37      阅读:15      评论:0      收藏:0      [点我收藏+]

在两种情况下会调用析构函数:正常情况下删除对象,即显式调用或者对象离开声明周期;异常传递的栈开解,由异常处理系统删除对象。

可见,调用析构函数时异常可能处于激活状态,但不能再析构函数内部做判断,因此__必须在写析构函数时保守的假设异常被激活。如果一个异常被激活的同时,析构函数也抛出异常,并导致程序控制权转移到析构函数外,C++将调用terminate函数:立即终止程序的运行,甚至没有释放局部对象。__

例如一个析构函数:

Session::~Session()
{
    Destruction();
}

如果~Session()本身由异常抛出调用,同时Destruction()抛出了新的异常,并被传递到析构函数的调用者时,程序将会被立即终止。为了避免程序立即终止,必须通过try-catch禁止异常信息传递到析构函数外。

Session::~Session()
{
    try
    {
		Destruction();
    }
    catch(...)
    {}
}

catch的没有处理代码,确保本身不会产生新的异常;其看起来好像什么也没干,但阻止了任何试图抛出到析构函数外的异常。

11 禁止异常信息传递到析构函数外

原文:https://www.cnblogs.com/sandersunkown/p/15174040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!