在VC++7中,如果我执行以下操作:
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main( int, char** )
{
set_terminate( &myTerminate );
set_terminate( 0 );
terminate();
return 0;
}
该程序的行为就像直接调用abort()
一样,这正是默认的terminate()
处理程序所做的事情。
如果我省略了set_terminate( 0 );
语句,就会调用我的terminate处理程序。因此,调用set_terminate( 0 )
似乎具有将terminate()
处理程序重置为默认值的效果。
此行为是否仅适用于VC++7?如果我在其他实现上调用set_terminate( 0 )
,程序会不会遇到未定义的行为?
发布于 2010-02-09 19:29:21
查看该标准,可以发现以下几点:
terminate_handler set_terminate(terminate_handler f) throw();
1效果:建立由f指定的函数作为当前处理函数...切
2 要求:f不能是空指针。
3返回:前一个terminate_handler。
似乎是非标准的。
https://stackoverflow.com/questions/2228612
复制相似问题