C++ ⇒ VBA 書いて覚えるための初心者自己中記事

C++ ⇒ VBA 勉強の履歴を付けるというかノート代わりに使ってます

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関数で終了処理を登録する。

 

ここまで。