2018年01月10日
《その227》 terminate関数 & p.291演習8-1
terminate関数
例外処理中でないときに 「 throw; 」式が実行されたとき、すなわち、
送出する例外が存在しないのに 「 throw; 」式が実行された場合には、terminate関数が呼び出されます。
void terminate();
関数 terminate は、起動されると、abort() を呼び出し、これによってプログラムが終了します。
ただし、関数 terminate が呼び出す関数は、set_terminate関数を用いて変更することが可能です。
set_terminate関数に引数として関数(引数と返却値が共に void である *terminate_handler型の関数)を渡すと、関数 terminate は その関数を呼び出すようになります。
新版明解C++中級編 p.291 演習8-1
set_terminate関数によって exception_error を登録するプログラムを作成して、動作の検証を行え。
最初が、exception_error を登録するプログラムとその出力結果です。
"例外関連のエラーが発生しました。" というメッセージを表示した後に異常終了しています。
その下のプログラムと出力結果は、
デフォルトの terminate関数の挙動を見るためのものです。abort() が呼び出され、プログラムがいきなり異常終了しています。
// ------------------------------------
#include <exception>
#include <iostream>
using namespace std;
// set_terminate関数に渡す関数
void exception_error() {
cout << "例外関連のエラーが発生しま"
"した。\n";
abort();
}
int main() {
set_terminate(exception_error);
// exception_error を登録。
throw;
// 送出すべき例外が存在しないときに
// throw で例外を再送出。
}
// ------------------------------------
以下のプログラムと出力結果は、
デフォルトの terminate関数の挙動を見るためのものです。
// ------------------------------------
#include <exception>
#include <iostream>
using namespace std;
int main() {
throw;
// 送出すべき例外が存在しないときに
// throw で例外を再送出。
}
// ------------------------------------
Debug Error!
Abort() has been called
と表示され、いきなり異常終了しています。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7182277
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック