在C++中,每当有异常出现时,都会按照使用try-catch块定义的行为来处理。然而,经常有这样的情况:一个异常被抛出,但没有被捕获,因为异常处理子系统没有找到与之匹配的捕获块。在这种情况下,就会发生以下一系列的动作:
-
异常处理子系统调用函数: unexpected()。这个函数由默认的C++库提供,定义了出现未捕获的异常时的行为。默认情况下,unexpected调用terminate()。
-
terminate函数定义了进程终止时要执行的动作。默认情况下,它调用abort()。
-
进程被终止。
terminate()和unexpected()只是调用其他函数来实际处理一个错误。如上所述,unexpected() -> terminate() -> abort()。因此,当异常处理错误发生时,程序的运行会被中止。在某些时候,我们希望能够在这个过程中获得更多的信息,分析出错原因,避免后续再出现这个错误。C++也提供了方法,让我们可以改变终止发生的方式。
要改变终止处理程序,使用的函数是set_terminate(terminate_handler newhandler)
,它被定义在头文件<exception>
中。
下面的程序演示了如何设置一个自定义的终止处理程序。
// CPP program to set a new termination handler
// for uncaught exceptions.
#include