-
如果异常无法处理,terminate()结束函数会被自动调用
-
默认情况下,terminate()调用库函数abort()终止程序
-
abort()函数使得程序执行异常而立刻退出
-
C++支持替换默认的terminate()函数实现
-
自定义一个无返回值无参数的函数,不能抛出任何异常,必须以某种方式结束当前的程序
-
调用set_terminate()设置自定义的结束函数,参数类型为void(*)(),返回值为默认的terminate()函数入口地址。
#include <iostream>
#include <string>
#include <exception>
using namespace std;
class Test
{
public:
Test()
{
cout << "Test" << endl;
}
~Test()
{
cout << "~Test" << endl;
}
};
void my_terminate()
{
cout << "void my_terminate()" << endl;
//确保所有全局对象和静态局部对象全部正常启动
exit(1);
//异常中止程序,不会调用对象的析构函数
//abort();
}
int main()
{
set_terminate(my_terminate);
static Test t;
throw 1;
return 0;
}
Test
void my_terminate()
~Test
-
不要在析构函数中抛出异常,析构函数主要用来释放系统资源的地方,如果抛出异常,会得不到资源的正确释放
-
有可能导致terminate函数被重复调用,是系统进入一个不稳定的状况
-
如果异常没有被处理,最后terminate()结束整个程序
-
terminate()是整个程序释放系统资源的最后机会
-
结束函数可以自定义,但不能继续抛出异常
-
析构函数中不能抛出异常,可能导致terminate()多次调用。