2017-01-06 11 views
0

これは私のコンストラクタです:CreateInstanceオブジェクトはデストラクタで明示的に破棄する必要がありますか?

CMSATools::CMSATools() 
{ 
    m_pInterface = NULL; 

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

m_pInterfaceが定義されています:

MSAToolsLibrary::IMSAToolsLibraryInterfacePtr m_pInterface; 
+0

CMSAToolsディストラクターで 'm_pInterface'をリリースする必要があるかどうかを知りたいですか? – Praveen

+1

'm_pInterface'の動作は' m_pInterface'に依存します:その型と現在の状態。あなたはそれを示さない。これが現れるCOMオブジェクトは参照カウントされます。スマートポインタを使用していない場合は、適切に 'AddRef'メソッドと' Release'メソッドを呼び出す必要があります。オブジェクトのコピーを処理するか、コピーを無効にします。 –

+0

@ Cheersandhth.-Alf更新された質問をご覧ください。 –

答えて

2

m_pInterfaceは、スマートCOMオブジェクトポインタである場合は、CComPtrのように、あなたが明示的にそれを破壊する必要はありません。 ~CMSAToolsデストラクタが呼び出されたときやスマートポインタに新しい値が割り当てられたときのように、スマートポインタがスコープ外になると、現在ポインタを保持しているCOMオブジェクトの参照カウントがデクリメントされます。 COMオブジェクトの参照カウントが0になると、それ自体が破壊されます。

+0

はい、それはスマートCOMオブジェクトポインタです: '_COM_SMARTPTR_TYPEDEF(IMSAToolsLibraryInterface、__uuidof(IMSAToolsLibraryInterface));'。 –

関連する問題