メモリを安全に解放するマクロ for C++

既に解放済みのメモリを解放しようとするととんでもないことになるそうで
#defineマクロはバグの温床なんていわれることもあるけど、ここでは大活躍です。

#define SAFE_DELETE(p) if(p){delete p;p=0;}

//使うとき
A* a = new A();
SAFE_DELETE(a);

{}をつけたり、0がNULLだったりとバリエーションがあれど、基本的にこのような形です。
解放する前にチェックを入れるだけなんですが、使用頻度が高いので便利です。


DirectXなんかのサンプルコードとかでよく見かけますね。
SAFE_DELETEで検索してみると、もっと様々な情報が手に入るかと思います。




追記

どうやらdelete 0;をしても何もされない安全なコードのようです。
なのでifは不要のようですね。

#define SAFE_DELETE(p) {delete p;p=0;}

//使うとき
A* a = new A();
SAFE_DELETE(a);