首页 > 代码库 > C++异常处理(try语句的使用,异常的传播,栈展开)

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

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

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

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

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

 

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

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