人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: nekomilk
●カテゴリ:コンピュータ
✍キーワード:C++ エラー クラス 機構
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● zizz_walla
●25ポイント

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 の処理は非常に遅いです。使いすぎに注意してください。うまく使うとソースコードが非常にシンプルになり見通しが良くなります。

◎質問者からの返答

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

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

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

なるほど。なるほど…。


2 ● mogos
●25ポイント

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などもあります。

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ