いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

例外処理は頭が痛い…

ビルドが完了したということで、いざデバッグ実行してみたのですがー…案の定落ちました。(ぉ
namespace を追加しているときに、ちょっとコードを弄くったのでその辺りが影響しているようです。

というのが本題ではなく…

「ふぃふぽん」は環境によって例外がいつ発生するか分からないため、一部を try-catch で囲んでいるのです。今回、丁度そのテストみたいなことが出来ちゃったわけですが、どうも挙動がおかしい。
例外はキャッチしてくれるのですが「例外を発生させているオブジェクトへのポインタを格納しているauto_ptrでメモリリークしてる」とか報告されます。んー?

try
{
  auto_ptr<A> pa(new A); // こいつがリーク
  pa->Exception();       // 例外がでちゃってる関数
}
catch(...)
{
  ごにょごにょ
}

auto_ptr ってスコープ抜けるときに自動的に delete してるんじゃないんかい! なんでやねん!

…と思ったら、A::~A() で再度例外が発生してました_| ̄|○
そりゃー機嫌悪くなるわなぁ。

例外中に例外はマズイとか、デストラクタから例外を放出しちゃーいけないと、More Effective C++ で勉強させて頂きましたが……実際体験してみると、よく理解できるもんですなー。

しかしー、どう対処しようかなぁ。この問題…。