0

在 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 );语句,我的终止处理程序将被调用。因此调用set_terminate( 0 )似乎具有将terminate()处理程序重置为默认值的效果。

这种行为是否仅适用于 VC++7?如果我调用其他一些实现,程序会不会遇到未定义的行为set_terminate( 0 )

4

1 回答 1

4

研究标准揭示了以下内容:

terminate_handler set_terminate(terminate_handler f) throw();

1效果:将 f 指定的函数建立为当前处理函数 ... cut
2要求:f 不得为空指针
3返回:前一个 terminate_handler。

好像不规范。

于 2010-02-09T11:29:20.693 回答