例外処理について

C++は、エラーの処理として例外処理 の機能があります。
これを使って実行中の予期せぬエラーに備えます。
  • try
tryは、例外が発生する可能性がある範囲を囲む({から}まで)ために使います。

  • throw
throwは、例外を発生(スロー)させます。

  • catch
catchは、発生した例外を捕まえます(キャッチ)。


例外が throw でスローされると、throw以後は実行されず、読み飛ばします。
そして、スローされた例外型をキャッチできる 所を探します。
最初に見つかった catchブロックは、例外をキャッチして catchブロック内の処理を行います。
もし、型の一致する catchが見つからない場合は、現在の関数を呼び出した元の関数へ遡っていきます。
(この時、ローカル変数のデストラクタは呼び出される)

それを繰り返して、最終的に main関数の最後まできてもキャッチされない場合は、一般的にはプログラム自体が終了しますが、 この動作はあくまでデフォルトのものです。
ただ、この動作を変更する必要性はあまり無いと思います。

===================

例外処理は、使うとき、使わないときをどのように切り分けていますか?。

ここのサイトが参考になります。

  • ある条件で検索したところ、検索結果が0件だった場合、これは予期される通常の処理フローなので例外は使用しない
  • 一覧表示された項目の1つを選んで詳細表示をしたら、データが取れなかった場合、これは予期できない処理フローなので例外を使用する
  • 関数に渡された引数が不正(有効範囲外)であった場合、これは予期できない処理フロー(バグ)なので例外を使用する
  • ユーザが画面から入力したデータが不正(有効範囲外)であった場合、これは予期できる通常の処理フローなので例外は使用しない

コメント

人気の投稿