ヌル終了()ハンドラが許可されていますか?
-
19-09-2019 - |
質問
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 )
を呼び出す場合、プログラムは未定義の動作に実行されないのでしょうか?
解決
標準に見ると、以下のことを明らかにします:
terminate_handler set_terminate(terminate_handler f) throw();
1 エフェクト:機能を確立 現在のハンドラとしてfで指定 機能...
カット の2 の必要:fはNULLポインタはあってはならない
。 の3 の戻り値:前のterminate_handler
非標準であるように思われる。
所属していません StackOverflow