3 Stimmen

Gibt es ein Gegenstück zu "CreateInstance"?

Wir haben einige Codes, die MSXML verwenden und dies tun, um das XML-Dokumentobjekt zu erstellen:

MSXML2::IXMLDOMDocumentPtr  doc_in;

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

Wenn wir mit doc_in fertig sind, wie zerstören wir es dann? Wird es einfach automatisch zerstört, wenn doc_in den Anwendungsbereich verlässt, oder was?

3voto

Vagaus Punkte 4138

Si IXMLDOMDocumentPtr ein intelligenter Zeiger ist (wie es aussieht), dann kümmert er sich um den Aufruf von doc_in.Release() für Sie.

3voto

Georg Fritzsche Punkte 95256

Die Verwaltung der Lebensdauer von COM-Objekten baut auf Referenzzählung über IUnknown Methoden AddRef() y Release() . Für Einzelheiten siehe "Verwendung und Implementierung von IUnknown" insbesondere "Regeln für die Verwaltung von Referenzzählungen" .

Darüber hinaus werden intelligente Zeiger verwendet, am häufigsten ATLs CComPtr / CComQIPtr y _com_ptr_t .

Wenn Sie es also mit einem einfachen Zeiger auf eine COM-Instanz zu tun haben, müssen Sie Release() manuell auf das Eigentum zu verzichten.
Wenn Sie einen intelligenten Zeiger auf eine COM-Instanz haben, wird der Release() sollte für Sie erledigt werden, wenn die Smart-Pointer-Instanz den Gültigkeitsbereich verlässt - aber um sicher zu sein, werfen Sie einen Blick in die Dokumentation für die tatsächliche Smart-Pointer-Klasse, die Sie verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X