J'utilise des objets de type CComPtr. Mais j'ai quelques problèmes de fuite de mémoire. En particulier, j'ai le code suivant:CComPtr et compte de référence
CComPtr<ID2D1Bitmap> bitmap = create_bitmap(bitmapSize);
auto n = count_ref((ID2D1Bitmap*)bitmap);
Où:
template<class Interface>
ULONG count_ref(Interface* pInterface) noexcept
{
if (pInterface)
{
pInterface->AddRef();
return pInterface->Release();
}
return 0;
}
Et:
ID2D1Bitmap* create_bitmap(const D2D1_SIZE_U& size)
{
ID2D1Bitmap* bitmap;
CreateBitmap(&bitmap);
return bitmap;
}
Je me attendais à une valeur de n
égale à 1, mais il est en fait égal à 2. Pourquoi le nombre de références de mon CComPtr
n'est pas 1? Puis-je utiliser correctement mon objet CComPtr
?
Et quand le processus se termine, je reçois la fuite de mémoire suivante:
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.
Prendre possession du pointeur d'interface avec CComPtr :: Attach(). –