3 votes

Existe-t-il un équivalent à "CreateInstance" ?

Nous avons du code qui utilise MSXML et qui fait ceci pour créer l'objet document XML :

MSXML2::IXMLDOMDocumentPtr  doc_in;

doc_in.CreateInstance("Msxml2.DOMDocument.6.0");

Une fois que nous en avons terminé avec doc_in, comment le détruire ? Est-il automatiquement détruit lorsque doc_in sort du champ d'application, ou quoi ?

3voto

Vagaus Points 3834

Si IXMLDOMDocumentPtr est un pointeur intelligent (comme il semble l'être), il se chargera d'appeler doc_in.Release() pour vous.

3voto

Georg Fritzsche Points 59185

La gestion de la durée de vie des objets COM s'appuie sur comptage de référence vía IUnknown Les méthodes des s AddRef() y Release() . Pour plus de détails, voir "Utilisation et mise en œuvre de IUnknown" et en particulier "Règles de gestion des nombres de référence" .

En outre, des pointeurs intelligents sont utilisés, le plus souvent des ATL. CComPtr / CComQIPtr y _com_ptr_t .

Ainsi, si vous avez affaire à un simple pointeur sur une instance COM, vous devez Release() manuellement pour renoncer à la propriété.
Si vous disposez d'un pointeur intelligent vers une instance COM, la fonction Release() devrait se faire pour vous lorsque l'instance du pointeur intelligent sort du champ d'application - mais pour en être sûr, consultez la documentation de la classe de pointeur intelligent que vous utilisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X