今日始めてC++の例外の機構を知りました。これからは、エラー処理は例外をthrowしていきたいと思います。そこで質問ですが、throwする例外の基底クラスはどうすれば良いでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/01/07 00:47:11
  • 終了:--

回答(2件)

id:zizz_walla No.1

zizz_walla回答回数121ベストアンサー獲得回数02005/01/07 01:56:56

ポイント25pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

ご指定のページが見つかりません

基本的に Exception クラスから派生させます。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

ご指定のページが見つかりません

C++で例外処理ベースのモデルにする場合、メモリやリソースの解放を忘れがちになります。(特にWIN32APIを直接呼ぶような処理を記述する場合)ホルダクラスを作成するなどの工夫が必要となります。

また、try catch の処理は非常に遅いです。使いすぎに注意してください。うまく使うとソースコードが非常にシンプルになり見通しが良くなります。

id:nekomilk

>基本的に Exception クラスから派生させます。

VC以外でも、Exceptionクラスから派生できますか?

>C++で例外処理ベースのモデルにする場合、メモリやリソースの解放を忘れがちになります。(

なるほど。なるほど…。

2005/01/07 20:43:05
id:mogos No.2

mogos回答回数33ベストアンサー獲得回数02005/01/09 05:50:17

ポイント25pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

ご指定のページが見つかりません

例外についてはここに非常に詳しく書かれています。

第3部に書かれているとおり、例外はどんなものでも投げられますが、<stdexcept>に定義されているstd::exceptionクラス、またはそれから派生したクラスを継承することが標準規格で推奨されています。その例外の分類が明確な場合は派生したクラスから継承するのがよいと思います。

上記の例外として、第5部あたりに書いてあるとおり、operator newを定義するときには<new>の中に定義されているstd::alloc_errorから継承するのが一般的です。VC6など古い実装ではNULLが返ってくるだけのものもあるので、これで標準のオブジェクトのエラー処理をする際には注意が必要ですが。

他にも環境依存であればMFCのCExceptionなどもあります。

長くなったのでこのくらいで。

id:nekomilk

STLにもあるんですね。ありがとうございました。

2005/01/09 08:21:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません