首页 > 代码库 > C++异常处理(try语句的使用,异常的传播,栈展开)
C++异常处理(try语句的使用,异常的传播,栈展开)
try块可以嵌套使用,当try内部模块中为捕获到异常时,传播到外部捕获。当内层已经捕获异常时,将不再传播到外层。当需要传播到外层时,需要内部捕获该异常后,重新再抛出异常,就可以传播到外面。注意重新抛出异常的时候会调用拷贝构造函数。
当异常均未被捕获时,将调用terminate函数,terminate函数默认调用系统的abort()函数终止进程。可以用set_terminate函数设置terminate调用的函数。
栈展开的定义是,沿着嵌套调用链接向上查找,直至为异常找到一个catch子句。这个过程称之为栈展开。在栈展开的过程中,会为生产的局部对象调用析构函数。
构造函数中可以抛出异常,抛出异常时应消除已构造的对象(如已构造一个obj = new Obj,就要保证delete掉这个new出来的对象)。由于构造未完成,所以不会调用析构函数。
注意:抛出异常的时候,就会调用析构函数,而不是捕获异常的时候,在main中抛出异常后,在这个异常未被捕获之前,在调用析构函数又抛出异常,此时就会调用terminate函数。这样抛出异常就没有意义了,所以一般来说不应在析构函数中抛出异常。
C++异常处理(try语句的使用,异常的传播,栈展开)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。