2017-01-06 3 views
0

Ceci est mon constructeur:Est-ce que les objets CreateInstance doivent être détruits de manière explicite dans le destructeur?

CMSATools::CMSATools() 
{ 
    m_pInterface = NULL; 

    HRESULT hr; 
    hr = m_pInterface.CreateInstance(__uuidof(MSAToolsLibrary::MSAToolsLibraryClass)); 
    if (FAILED(hr)) 
    { 
     // TODO  } 
} 

m_pInterface est défini:

MSAToolsLibrary::IMSAToolsLibraryInterfacePtr m_pInterface; 
+0

Vous voulez savoir si 'm_pInterface' doit être libéré dans le distracteur CMSATools ?? – Praveen

+1

Le comportement de 'm_pInterface' dépend de' m_pInterface': son type et son état actuel. Vous ne montrez pas ça. Les objets COM, ce qui semble être, sont comptés par référence, et si vous n'utilisez pas de pointeur intelligent, vous devez appeler ses méthodes 'AddRef' et' Release' selon le cas. Soit gérer la copie de votre objet, soit désactiver la copie. –

+0

@ Cheersandhth.-Alf S'il vous plaît voir la question mise à jour. –

Répondre

2

Si m_pInterface est un pointeur intelligent d'objet COM, comme CComPtr, vous n'avez pas besoin de détruire explicitement. Lorsque le pointeur intelligent est hors de portée, par exemple lorsque le destructeur ~CMSATools est appelé ou lorsque le pointeur intelligent reçoit une nouvelle valeur, il décrémente le compte de référence de l'objet COM sur lequel il tient actuellement un pointeur. Lorsque le nombre de références de l'objet COM tombe à 0, il se détruit lui-même.

+0

Oui, c'est un pointeur intelligent d'objet COM: '_COM_SMARTPTR_TYPEDEF (IMSAToolsLibraryInterface, __uuidof (IMSAToolsLibraryInterface));'. –