2018年01月11日
《その228》 例外安全と例外中立 & p.291演習8-2
例外安全
例外が発生した場合に、例外が発生した側 あるいは 例外を通知する側が、その例外に対してでき得る適切な処理を行うことの保証が必要です。その保証がなされることを例外安全といいます。
例外中立
例外安全が確保されていても、例外が発生した側において、例外を回復できない場合 (場合1.) があります。また、そもそも、例外が発生した側において例外処理を行わない設定の場合 (場合2.) もあります。
上記 (場合1.)、(場合2.) のような場合に、例外が発生した側は、その例外を上位呼出し側に通知する責任があります。この責任が果たされていることを例外中立といいます。
tryブロックに関数全体を入れる
例えば、main関数全体を
int main() try { ・・・・・・ }
catch (...) { ・・・・・・ }
のように、tryブロックに入れると、main関数内で発生したすべての例外を、catch (...) { ・・・・・・ } が捕捉することになります。こうすることで、プログラムの異常終了を避けることができます。
新版明解C++中級編 p.291 演習8-2
tryブロックに関数全体を入れた構造をもつプログラムを作成して、動作の検証を行え。
// ------------------------------------
#include <iostream>
using namespace std;
class Err { };
int main() try{
int n;
cout << "正の整数値 : "; cin >> n;
switch (n) {
case 1: throw Err() ; break;
case 2: throw bad_alloc() ; break;
case 3: throw 1 ; break;
case 4: throw 3.14 ; break;
case 5: throw 'a' ; break;
default: throw "ABC" ; break;
}
}
catch (...) { cout << "正常終了しました。\n"; }
// ------------------------------------
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7184635
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック