开发者

Is null terminate() handler allowed?

开发者 https://www.devze.com 2022-12-19 10:18 出处:网络
In VC++7 if I do the following: void myTerminate() { cout << \"In myTerminate()\"; abort(); } int main( int, char** )

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

精彩评论

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