例外処理を使用しない対応には
・例外処理を使用できない
・例外処理を使用したくない
の2通りがある。
例外処理を使用できない
①処理系が例外処理をサポートしていない
⇒Embedded C++のような非標準処理系の場合
⇒マルチタスク環境で例外処理自体はサポートしているものの正常に動作しない場合
②システム全体を分割リンクする(複数のロードモジュールを使用する)
⇒例外処理は関数の呼ばれた経路やCallされたデストラクタを記録するため、分割リンクされると正常動作しない
③CをはじめとしたC++以外の言語で記述されたモジュールが混在する
⇒例えば、C++→C→C++の場合、Cで記述された関数はC++の例外を正常に伝播できない恐れ有り
例外処理を使用したくない
①例外的な事象を高速に処理したい
⇒リアルタイム性が要求される等
②プログラムサイズをできる限り小さくしたい
⇒try/catch/throwを明示的に使用しないだけでは不十分
③開発メンバーのC++に対する習熟度が低い
⇒
例外処理を使用しないポイント
①送出式(throw)を使用しない
②明示的なデストラクタは定義しない
⇒明示的なデストラクタがあると、実際に例外が送出されるかどうかに関わらず、例外が送出されたときにデストラクタを呼び出すためのコードが挿入されるためオーバーヘッドになってしまう
③位置指定形式以外のデフォルトのnew演算子は使用しない
④dynamic_cast演算子を用いた参照型へのキャストは行わない
⑤typeid演算子は使用しない
⑥自立環境(フリースタンディング環境)用のものを除き、標準ライブラリは使用しない
- 新訂版 More Effective C++/スコット・メイヤーズ
- ¥3,990
- Amazon.co.jp