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 で指定された関数を現在のハンドラー関数として確立します ... カット
2要件: f はヌル ポインターであってはなりません
3戻り値: 前の terminate_handler。

非標準のようです。

于 2010-02-09T11:29:20.693 に答える