DirectXのReleaseメソッド

DirectX関連のクラスには大抵Releaseメソッドなるものが存在していて、オブジェクトの破棄をする際に呼ばないといけないようです。

そこで処理を簡略化するためによくSAFE_RELEASEというような名前のマクロを用意すると便利らしいです。

#define SAFE_RELEASE(p) do { if(p){ (p)->Release(); (p) = NULL;} } while(0)

pが有効ならReleaseを呼んでNULLを代入するという感じですね。

ロベール本等でテンプレートで出来ることはマクロじゃなくてテンプレートでやるべきという話があったので今回はテンプレートで実装することにします。

template<class T>
inline void safe_release (T& p) {
    if (p) {
        p->Release();
        p = NULL;
    }
}

マクロのように括弧で囲ったり、do〜whileしなくて良くなったりするので便利ですね。