ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

deleteを使うときのマクロ

DirectXのサンプルを見ていたら、DXUT.hに確保したメモリを安全に解放するためのマクロがあったので引用。

#ifndef SAFE_DELETE
#define SAFE_DELETE(p)       { if (p) { delete (p);     (p)=NULL; } }
#endif    
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p);   (p)=NULL; } }
#endif    
#ifndef SAFE_RELEASE
#define SAFE_RELEASE(p)      { if (p) { (p)->Release(); (p)=NULL; } }
#endif

SAFE_RELEASEはインターフェイスの参照カウンタを減少させるもの。カウンタが0になったら解放される。


ポインタがNULLじゃないかチェックしてからdeleteしてポインタにNULLを入れるというのをよく書いていた。たしかにマクロにすればいいじゃん。
SAFEという名前が付いているけど、やっぱり自分で注意して使わないといけない。配列で確保していたポインタを解放するのにSAFE_DELETE()を使ったら駄目。