C++ terminate 書いて覚えるための初心者自己中記事
例外が最後までキャッチされないときに呼ばれる関数terminate
terminate関数が呼ばれるとプログラムは異常終了する。
正確にはterminate関数はabort関数を呼び出して異常終了する。
exit関数は呼ばれないのでデストラクタも呼ばれない、正常な終了処理が行われない。
set_terminate関数を使うと、強制終了する前に行う処理を追加できる。
void OnTerm() { cerr << "異常終了です" << endl; } int main() { set_terminate(OnTerm); throw exception(); system("pause"); }
この後にabort関数が呼ばれる。
キャッチできない例外
unexpected関数が呼ばれたとき
二重例外が発生したとき
静的変数のコンストラクタやデストラクタで例外が発生したとき
catchブロック外で例外の再送出を行おうとしたとき
atexit関数で登録された処理の中で例外が投げられたとき
これらの場合はset_terminate関数で終了処理を登録する。
ここまで。