質問

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

非標準であるように思われる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top