私はタイプCComPtrのオブジェクトを使用しています。しかし、私はいくつかのメモリリークの問題を抱えています。CComPtrと参照カウント
CComPtr<ID2D1Bitmap> bitmap = create_bitmap(bitmapSize);
auto n = count_ref((ID2D1Bitmap*)bitmap);
:私は1に等しいn
の値を期待していたが、それは実際に等しい
ID2D1Bitmap* create_bitmap(const D2D1_SIZE_U& size)
{
ID2D1Bitmap* bitmap;
CreateBitmap(&bitmap);
return bitmap;
}
:
template<class Interface>
ULONG count_ref(Interface* pInterface) noexcept
{
if (pInterface)
{
pInterface->AddRef();
return pInterface->Release();
}
return 0;
}
特に、私は次のコードを持っています2.私のCComPtr
の参照カウントが1でないのはなぜですか?
私のCComPtr
オブジェクトを正しく使用していますか?
とするとき、プロセスは、私は、次のメモリリークを取得終了:
An interface [072B1F50] was created but not released. Use 'dps 072B1F20' to view its allocation stack.
Object type: ID2D1Bitmap
Device-dependent size: 1000 x 600
Device-independent size: 1000.00 x 600.00
Format: DXGI_FORMAT_B8G8R8A8_UNORM
Alpha mode: D2D1_ALPHA_MODE_PREMULTIPLIED
Outstanding reference count: 1
D2D DEBUG ERROR - Memory leaks detected.
インターフェイスポインタの所有権をCComPtr :: Attach()で取得します。 –