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()を使ったら駄目。