开发者

Is null terminate() handler allowed?

In VC++7 if I do the following:

void myTerminate()
{
    cout << "In myTerminate()";
    abort();
}

int main( int, char** )
{
    set_terminate( &myTerminate );
    set_terminate( 0 );
    terminate();
    return 0;
}

the program behaves exactly as if abort() was called directly which is exactly what default terminate() handler does.

If I omit the set_terminate( 0 ); statement my terminate handler is being called. So call开发者_运维技巧ing set_terminate( 0 ) seems to have the effect of resetting the terminate() handler to default.

Is this behavior specific to VC++7 only? Won't the program run into undefined behavior if I call set_terminate( 0 ) on some other implementation?


Looking into the standard reveals the following:

terminate_handler set_terminate(terminate_handler f) throw();

1 Effects: Establishes the function designated by f as the current handler function ... cut
2 Requires: f shall not be a null pointer.
3 Returns: The previous terminate_handler.

Seems to be non-standard.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜