C++异常处理(try语句的使用,异常的传播,栈展开)

try块可以嵌套使用,当try内部模块中为捕获到异常时,传播到外部捕获。当内层已经捕获异常时,将不再传播到外层。当需要传播到外层时,需要内部捕获该异常后,重新再抛出异常,就可以传播到外面。注意重新抛出异常的时候会调用拷贝构造函数。

当异常均未被捕获时,将调用terminate函数,terminate函数默认调用系统的abort()函数终止进程。可以用set_terminate函数设置terminate调用的函数。

栈展开的定义是,沿着嵌套调用链接向上查找,直至为异常找到一个catch子句。这个过程称之为栈展开。在栈展开的过程中,会为生产的局部对象调用析构函数。

构造函数中可以抛出异常,抛出异常时应消除已构造的对象(如已构造一个obj = new Obj,就要保证delete掉这个new出来的对象)。由于构造未完成,所以不会调用析构函数。

 

注意:抛出异常的时候,就会调用析构函数,而不是捕获异常的时候,在main中抛出异常后,在这个异常未被捕获之前,在调用析构函数又抛出异常,此时就会调用terminate函数。这样抛出异常就没有意义了,所以一般来说不应在析构函数中抛出异常。

原文链接: https://www.cnblogs.com/mingdimowang-lyw/p/6628215.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++异常处理(try语句的使用,异常的传播,栈展开)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/251561

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午5:22
下一篇 2023年2月14日 上午5:22

相关推荐