捕捉されない例外および予期しない例外の処理(C++)
C++ における標準的な例外処理 への移動
例外が送出されて例外ハンドラが見つからない場合、つまり、例外が捕捉されない場合には、プログラムは終了関数を呼び出します。set_terminate を使用すると、独自の終了関数を指定することができます。終了関数を指定しなければ、terminate 関数が呼び出されます。たとえば次のコードでは、my_terminate 関数を使ってどのハンドラにも捕捉されない例外の処理を行っています。
void SetFieldValue(DF *dataField, int userValue) {
if ((userValue < 0) || (userValue) > 10))
throw EIntegerRange(0, 10, userValue);
// ...
}
void my_terminate() {
printf("Exception not caught");
abort();
}
// Set my_terminate() as the termination function
set_terminate(my_terminate);
// Call SetFieldValue. This generates an exception because the user value is greater
// than 10. Because the call is not in a try block, my_terminate is called.
SetFieldValue(DF, 11);
関数が、どの例外を送出するかを指定しながら、指定されていない例外を送出した場合、予期しない例外に対処するための関数が呼び出されます。この関数は、set_unexpected を使って独自のものを指定することができます。この関数を指定しなければ、unexpected 関数が呼び出されます。