C++のtry/catch

で、リークしているのを発見した。(自分の古いコードで)
戒めにさらしておこう。


try{
MyClass * m = new MyClass();
if(!m->exec()){
throw 1;
}
delete m; // 消去するのはここではない
}catch(int exp){
switch(exp){
case 1:
// 例外処理1
// ここでdelete m;を忘れていた
case 2:
//例外処理2
// ここでdelete m;を忘れていた
}
}
// 本来はここでdelete m;するべきか。
あろうことか、try/catchの間でreturnしているところまで見つけちゃったりして。
年配のプログラマが、C++のtry/catchを嫌う理由がやっとわかったような気がする。
ここで、auto_ptrとか使っておけばなぁ、と、思っても後の祭り。
せめてもの救いは、これが顧客先へ納品されたコードではなく、お蔵入りになったコードであったことか。
メモ:
間違ってるコードは間違ってるように
auto_prtの使い方