-
23-09-2019 - |
質問
すべてのD3Dインタフェース由来のCOMのIUnknownインタフェースでいう容易なルートを公開D3D物のものを使っておけば間違いないようになります:
__inline BOOL SafeRelease(IUnknown*& pUnknown)
{
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
pUnknown = NULL;
return TRUE;
}
この動作しないものとしてコンパイラが生まれの無効なタイプの変換エラー(s)、写真撮影のポイントにご案内してます。唯一の方法で思いったこ
__inline BOOL SafeRelease(void* pObject)
{
IUnknown* pUnknown = static_cast<IUnknown*>pObject;
if(pUnknown != NULL && FAILED(pUnknown->Release()))
return FALSE;
return TRUE;
}
そこでゆったりいくつかの機能でも見えるが)非常に危.あると良い。この作品のように私の最初の例では最適かどうかがうなずマクロの場合はその可能)
解決
Aテンプレート機能は、あなたの問題を解決します:
template<class T>
__inline bool SafeRelease(T*& pUnknown)
{
if (pUnknown == NULL) return false;
if (0 == pUnknown->Release())
pUnknown = NULL;
return true;
}
他のヒント
あなたはもともと書いたものを行うことができた場合、あなたは型の安全性に違反します:
IDirect3DDevice *blah;
IUnknown *bar;
IUnknown *&unknown= blah;
unknown= bar;
は明らかに、bar
にunknown
の割り当てタイプの安全性に違反するblah
、へのIUnknown
点を意味する。
nobugzのソリューションには、Iでしょうが、あなたが何をしたいか考えられますNULLにこれらのポインタを設定すると、コードの品質を増加させないと主張しています。あなたは他のコードが複数回Release
ないことを確認する必要がある場合は、おそらくバグだらけのコードが失敗しないコードではなくなっていることを修正しに行く必要があります。
私はしばらくのDirectXで働いていないが、私はそれのヘッダーにSAFE_RELEASE
マクロどこかを持って覚えています。それはdxutil.h
でのGoogleコード検索を示します。
所属していません StackOverflow