コンストラクタでの例外処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazuoni

コンストラクタでの例外処理

#1

投稿記事 by kazuoni » 16年前

お邪魔します。

とあるサイト様のプログラムに
以下のようなコンストラクタを見つけました。
// コンストラクタ
Bitmap::Bitmap()
try :
mainMemory(0), mainBitmap(0), defaultMainBitmap(0),
maskMemory(0), maskBitmap(0), defaultMaskBitmap(0),
width(0), height(0)
{
}
catch (...)
{
}
それぞれの型は以下のとおりです。
HDC      mainMemory;
HBITMAP  mainBitmap;
HBITMAP  defaultMainBitmap;
HDC      maskMemory;
HBITMAP  maskBitmap;
HBITMAP  defaultMaskBitmap;
int width;
int height;
動的確保の際には例外処理を上記のコンストラクタのようにする
ことは知っていましたが、メンバの初期化の際にも例外処理は必要なのでしょうか?
(例外処理の中身はユーザーで補完してくれってことなのか、とりあえず、書いておいただけなのか理解できなくて・・・)

たかぎ

Re:コンストラクタでの例外処理

#2

投稿記事 by たかぎ » 16年前

例外ハンドラはちゃんと自分で書かないとダメです。
関数監視ブロックを使うことの利点は、コンストラクタ内で例外が発生した場合、(他の例外に置き換えられることはあるにしても)確実にそれを外部に通知できるようにすることにあります。

kazuoni

Re:コンストラクタでの例外処理

#3

投稿記事 by kazuoni » 16年前

たかぎさん、ご回答ありがとうございます。

ということは、多くの参考書で紹介しているコンストラクタは、
例外処理をしていないということで、欠陥があるということでしょうか?

たかぎ

Re:コンストラクタでの例外処理

#4

投稿記事 by たかぎ » 16年前

欠陥があるといえばそうですが...

書籍のサンプルコードというのは、どんなテーマかにもよりますが、やりたいことの実現方法を解説するためのものです。
ですから、本質から外れるエラー処理や例外処理は省略している場合がほとんどです。
もし仮に、まじめにエラー処理や例外処理を記述したサンプルコードを掲載してしまうと、論点がぼやけてしまいます。

kazuoni

Re:コンストラクタでの例外処理

#5

投稿記事 by kazuoni » 16年前

確かにそうですね^^;
ご回答ありがとうございました。
例外処理を頭の中にしっかりと入れておきたいと思います。
たかぎさん、ご回答ありがとうございました。
次回もよろしくお願いします。

#株式会社きじねこHPの技術情報はよく読ませていただいてます。

閉鎖

“C言語何でも質問掲示板” へ戻る