すべての D3D インターフェイスは COM の IUnknown インターフェイスから派生しているため、D3D オブジェクトを解放するには簡単な方法を使用し、次のようなものを使用します。
__inline BOOL SafeRelease(IUnknown*& pUnknown)
{
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
pUnknown = NULL;
return TRUE;
}
ただし、使用しようとするとコンパイラが無効な型変換エラーを生成するため、これは機能しません。私が考えることができる唯一の方法はこれでした:
__inline BOOL SafeRelease(void* pObject)
{
IUnknown* pUnknown = static_cast<IUnknown*>pObject;
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
return TRUE;
}
しかし、その後、いくつかの機能が失われ、見た目も非常に危険です。これを行うより良い方法はありますか?私の最初の例のように機能するものが最適ですが、マクロの使用は避けたいです(可能な場合)