C++ プログラミングガイド

set_terminate()

terminate() のデフォルトの動作は、次のように関数 set_terminate() を呼び出すことによって変更できます。


// 宣言は標準ヘッダー <exception> に含まれる
namespace std {
   typedef void (*terminate_handler)();
   terminate_handler  set_terminate(terminate_handler f) throw();
   void terminate();
}

terminate() 関数は、次のような場合に呼び出されます。

terminate()set_terminate() に引数として渡された関数を呼び出します。このような関数はパラメータを持たず、値を返すこともなく、プログラム (または現在のスレッド) を必ず停止します。set_terminate() への最後の呼び出しで渡された関数が呼び出されます。最後に呼び出された set_terminate() に引数として渡された以前の関数が戻り値になります。そのため terminate を使用し、今までに登録された関数を順次呼び出すようにプログラミングすることができます。terminate() のデフォルトの関数は、メインスレッドに対して abort() を呼び出し、他のスレッドに対して thr_exit() を呼び出します。thr_exit() はスタックを巻き戻したり、自動オブジェクトに対する C++ デストラクタを呼び出すことはありません。


注 -

呼び出し元に戻ったり、プログラムまたはスレッドを終了しないような関数を terminate() の代用として選択すると、エラーになります。