Lorsque vous travaillez dans le monde non géré, nous devons nous assurer que nous nettoyons après nous si nous avons alloué de la mémoire sur le tas (par exemple en utilisant le mot-clé new
en C++); nous devons également nous assurer que nous AddRef
COM composants qui sont créés en utilisant CreateInstance
et à Release
plus tard; peut-être quelque chose comme:Gestion de la mémoire pour les composants .NET utilisés par le code non géré
SomeNameSapce::IObjPtr obj;
HRESULT hr = obj.CreateInstance(L"SomeObject");
if (hr == S_OK)
{
obj->AddRef();
m_anotherObj= obj->GetObj();
obj->Release();
}
Il est évident que nous pourrions utiliser des pointeurs intelligents et d'autres choses (en C++) mais c'est d'ailleurs le point ...
Avons-nous aussi AddRef/Release
pour les objets qui sont saisis de COM composants (comme m_anotherObj dans l'exemple ci-dessus)?
Pour rendre les choses plus confuses, que se passe-t-il si ce composant particulier qui est en fait un composant .NET qui est exposé à du code non géré via une interface COM? Est-ce que le garbage collector sait effacer les choses ou tout doit-il être fait manuellement dans le monde non géré?