フィンランド1人旅行記・1日目 フィンランドに行くと決めてから観た『かもめ食堂』は、白昼夢のような不気味な映画だった。小林聡美演じる食堂の店主は、淡々と店を営み、金銭や将来など現実的な問題に直面もせず、地から足が離れているよう。途中まで、夢オチか幽霊オチかを予想したほどだ。 ただ、…

株式会社きじねこは大阪のソフトウェア開発会社です。組込み系・業務系のプログラム開発から電子回路の設計までおまかせください。 比較的有名なサイトで「コンストラクタからの例外送出」が「禁じ手」として紹介されていることもあり、また、最近ではその内容を再編集した書籍が出版されたこともあって、コンストラクタから例外を送出すべきではないと考える人は多いようです。 その根拠となっているのは、コンストラクタから例外を送出した場合、デストラクタが呼ばれないためにリソースリークにつながるというものです。これは、次のようなケースを想定しているものと思われます。 foo::foo() : a(new A), b(new B) { } 確かに、a または b のうち、後から初期化される側で例外が送出されると、他方が解放される機会が失われるため、リークにつながります。しかし、 void foo() { A* a =
delete する変数が未初期化になっている可能性を考えろ コンストラクタの初期化子リストで throw とか 初期化子リストで throw する可能性のある式を評価するな。 0 を入れておいて、コンストラクタ内で評価しろ または、ポインタラッパー的なものを使え。(デフォルトコンストラクタで初期化されるから) 未初期化変数への代入式で throw とか とりあえず、変数初期化子で 0 代入しとけ コンストラクタで例外が発生した場合にデストラクタが呼ばれないことに注意しろ コンストラクタ内で new して、そのままとか boost::shared_ptr 使え または、 try { /* ... */ } catch(...) { delete p; throw; } って感じで、すべての例外を catch して delete しとけ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く