アフィリエイト広告を利用しています

広告

posted by fanblog

2018年01月15日

《その235》 bad_exception例外


 bad_exception例外

 bad_exception例外は、exception からの public派生クラスです。
この bad_exception例外は、関数が例外指定に違反した例外を送出しようとしたときに、送出されます。
( 例外指定については、本ブログ《225》をご参照ください。)

以下は、《225》からの抜粋です。

例外指定違反が起きた場合

 (1) bad_exception例外が送出されて unexpected関数が呼び出されます。
 (2) unexpected関数は、デフォルトの unexpected_handler型関数を呼び出し、次いで、terminate関数が呼び出されます。
 (3) terminate関数 は、abort() を呼び出し、これによりプログラムは終了します。

 ここで、上記 (2) の、デフォルトの unexpected_handler型関数を、set_unexpected関数を使って置き換えることが可能です。
 また、上記 (3) の terminate関数のデフォルト指定関数についても、set_terminate関数を使用して置き換えることが可能です。
※ set_unexpected(f1) の引数 f1 が unexpected関数によって 呼び出される関数になり、
  set_terminate(f2) の引数 f2 が terminate関数によって 呼び出される関数になります。

ただし、set_terminate関数で、デフォルトでない関数を指令する場合、新たな指定関数は、
呼び出し元に戻ることなくプログラムを終了するものでなければなりません。


 本ブログの《225》で考えたプログラムは、set_unexpected関数を用いて、unexpected関数が呼び出す関数を変更するものでした。

 今回のプログラム(下記)では、前回と同じく、
set_unexpected関数を用いて、unexpected関数が呼び出す関数を変更したうえで、さらに
set_terminate関数を用いて、terminate関数が呼び出す関数を変更しています。

※ VC++ は例外指定に対応していないため、今回のコンパイルには、Eclipse を使いました。

#include <exception>
#include <iostream>
using namespace std;

void f() throw(int) { // int型 の例外指定
throw ' ';
// 例外指定に反してchar型の例外を送出し
// たため、bad_exception例外が送出
// されます。
}

void unexpected_tmp_handler() {
// 自作のハンドラ関数
std::cout << "unexpected_tmp_handlerが"
"呼ばれました。\n";
}

void terminate_tmp_handler() {
// 自作のハンドラ関数
std::cout << "terminate_tmp_handlerが"
"呼ばれました。exit(1)で"
"終了します。\n";
exit(1);
}

int main() {
set_unexpected(unexpected_tmp_handler);
// set_unexpected関数で、
// unexpected_tmp_handler を登録。

set_terminate(terminate_tmp_handler);
// set_terminate関数で、
// terminate_tmp_handler を登録。

f(); // 関数 f の呼び出し。
}

f08_0063.png

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7199437
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。