Partager via


prentice : : ~ptr

Détruit com::ptr.

~ptr();

Notes

Dans la destruction, com::ptr libère toutes les références qui appartiennent à l'objet COM. En supposant qu'il n'y a pas d'autres références est maintenu sur l'objet COM, l'objet COM sera supprimé et sa mémoire est libérée.

Exemple

Cet exemple implémente une classe CLR qui utilise un com::ptr pour encapsuler son attribut privé IXMLDOMDocument. Dans la fonction main, les deux destructeurs des objets XmlDocument sont appelés lorsqu'ils passent hors de portée du bloc try, ce qui réduit le destructeur sous-jacent com::ptr est appelé, libérant toutes les références détenues sur l'objet COM.

// comptr_dtor.cpp
// compile with: /clr /link msxml2.lib
#include <msxml2.h>
#include <msclr\com\ptr.h>

#import <msxml3.dll> raw_interfaces_only

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace msclr;

// a ref class that uses a com::ptr to contain an 
// IXMLDOMDocument object
ref class XmlDocument {
public:
   // construct the internal com::ptr with a null interface
   // and use CreateInstance to fill it
   XmlDocument(String^ progid) {
      m_ptrDoc.CreateInstance(progid);   
   }

   // construct the internal com::ptr with a COM object
   XmlDocument(IXMLDOMDocument* pDoc) : m_ptrDoc(pDoc) {}

   // note that the destructor will call the com::ptr destructor
   // and automatically release the reference to the COM object

private:
   com::ptr<IXMLDOMDocument> m_ptrDoc;
};

// use the ref class to handle an XML DOM Document object
int main() {
   IXMLDOMDocument* pDoc = NULL;

   try {
      // create an XML DOM document object
      Marshal::ThrowExceptionForHR(CoCreateInstance(CLSID_DOMDocument30, NULL, 
         CLSCTX_ALL, IID_IXMLDOMDocument, (void**)&pDoc));
      // construct the ref class with the COM object
      XmlDocument doc1(pDoc);

      // or create the class from a progid string
      XmlDocument doc2("Msxml2.DOMDocument.3.0");
   }
   // doc1 and doc2 destructors are called when they go out of scope
   // and the internal com::ptr releases its reference to the COM object
   catch (Exception^ e) {
      Console::WriteLine(e);   
   }
   finally {
      if (NULL != pDoc) {
         pDoc->Release();      
      }
   }
}

Configuration requise

Fichier d'en-tête <msclr\com\ptr.h>

Espace de noms msclr::com

Voir aussi

Référence

prentice : : prentice

prentice : : CreateInstance

Autres ressources

membres PTR