次の方法で共有

Facebook x.com LinkedIn 電子メール

CComPtr クラス

COM インターフェイス ポインターを管理するためのスマート ポインター クラスです。

template<
 class T 
>
class CComPtr

パラメーター

  • T
    格納されるポインターの種類を指定する COM インターフェイス。

解説

ATL では、CComPtr および CComQIPtr クラス を使って、COM インターフェイス ポインターを管理します。 これらのクラスは CComPtrBase クラス から派生し、参照カウントを自動的に実行します。

CComPtr クラスおよび CComQIPtr クラスを使って参照カウントを自動的に実行することにより、メモリ リークを防ぐことができます。 次の関数はどちらも同じ論理演算を実行するものですが、2 つ目の関数では、CComPtr クラスを使用することにより、エラーの発生する可能性を低く抑えている点に注目してください。

// Error-checking routine that performs manual lifetime management
// of a COM IErrorInfo object
HRESULT CheckComError_Manual()
{
 HRESULT hr;
 CComBSTR bstrDescription; 
 CComBSTR bstrSource; 
 CComBSTR bstrHelpFile; 
 IErrorInfo* pErrInfo = NULL; // naked COM interface pointer
 hr = ::GetErrorInfo(0, &pErrInfo);
 if(hr != S_OK)
 return hr;
 hr = pErrInfo->GetDescription(&bstrDescription); 
 if(FAILED(hr))
 {
 pErrInfo->Release(); // must release interface pointer before returning
 return hr;
 }
 hr = pErrInfo->GetSource(&bstrSource);
 if(FAILED(hr))
 {
 pErrInfo->Release(); // must release interface pointer before returning
 return hr;
 }
 hr = pErrInfo->GetHelpFile(&bstrHelpFile);
 if(FAILED(hr))
 {
 pErrInfo->Release(); // must release interface pointer before returning
 return hr;
 }
 pErrInfo->Release(); // must release interface pointer before returning
 return S_OK;
}
// Error-checking routine that performs automatic lifetime management
// of a COM IErrorInfo object through a CComPtr smart pointer object
HRESULT CheckComError_SmartPtr()
{
 HRESULT hr;
 CComBSTR bstrDescription; 
 CComBSTR bstrSource; 
 CComBSTR bstrHelpFile; 
 CComPtr<IErrorInfo> pErrInfo; 
 hr = ::GetErrorInfo(0, &pErrInfo);
 if(hr != S_OK)
 return hr;
 hr = pErrInfo->GetDescription(&bstrDescription); 
 if(FAILED(hr))
 return hr;
 hr = pErrInfo->GetSource(&bstrSource);
 if(FAILED(hr))
 return hr;
 hr = pErrInfo->GetHelpFile(&bstrHelpFile);
 if(FAILED(hr))
 return hr;
 return S_OK;
} // CComPtr will auto-release underlying IErrorInfo interface pointer as needed

デバッグ ビルドでは、コードのトレース用に atlsd.lib とリンクします。

必要条件

**ヘッダー:**atlbase.h

参照

参照

CComPtr::CComPtr

CComQIPtr::CComQIPtr

その他の技術情報

CComPtr のメンバー

ATL クラスの概要


  • Last updated on 2011年08月09日