每当C++中出现异常时,都会按照使用try-catch块定义的行为进行处理。但是,通常会抛出一个异常但没有捕获到异常,这是因为异常处理子系统无法为该特定异常找到匹配的catch块。在这种情况下,将执行以下一组操作:
- 异常处理子系统调用该函数: Unexpected() 。默认C++库提供的此函数定义发生未捕获的异常时的行为。默认情况下,意外调用终止() 。
- 终止函数定义了过程终止期间要执行的动作。默认情况下,这会调用abort() 。
- 该过程中止。
这些terminate()和unexpected()只是调用其他函数来实际处理错误。如上所述,终止调用中止(),并且意外调用()终止()。因此,当发生异常处理错误时,这两个函数都会停止程序执行。但是,您可以更改终止的方式。
要更改终止处理程序,使用的函数是set_terminate(terminate_handler newhandler),该函数在标头
以下程序演示了如何设置自定义终止处理程序:
// CPP program to set a new termination handler
// for uncaught exceptions.
#include
#include
using namespace std;
// definition of custom termination function
void myhandler()
{
cout << "Inside new terminate handler\n";
abort();
}
int main()
{
// set new terminate handler
set_terminate(myhandler);
try {
cout << "Inside try block\n";
throw 100;
}
catch (char a) // won't catch an int exception
{
cout << "Inside catch block\n";
}
return 0;
}
输出:
Inside try block
Inside new terminate handler
运行时错误:
Abort signal from abort(3) (SIGABRT)
应当适当注意的是,您的自定义终止处理程序必须做的唯一一件事就是停止程序执行。它不得返回程序或以任何方式继续执行。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。