英語で読む

次の方法で共有


CComPtr クラス

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

構文

template<class T>
class CComPtr

パラメーター

T
保存するポインターの種類を指定する COM インターフェイス。

メンバー

パブリック コンストラクター

名前 説明
CComPtr::CComPtr コンストラクター。

パブリック演算子

名前 説明
CComPtr::operator = メンバー ポインターにポインターを割り当てます。

解説

ATL から CComPtrCComQIPtr が使用され、COM インターフェイス ポインターを管理します。 どちらも CComPtrBase から派生し、両方とも自動参照カウントを行います。

CComPtrCComQIPtr クラスは、自動参照カウントを実行することで、メモリ リークを排除するのに役立ちます。 次の関数は、どちらも同じ論理操作を行います。 ただし、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 をリンクします。

継承階層

CComPtrBase

CComPtr

要件

ヘッダー: atlbase.h

CComPtr::CComPtr

コンストラクター。

CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();

パラメーター

lp
インターフェイス ポインターを初期化するために使用されます。

T
COM インターフェイス。

解説

Null ポインターでない場合、lp で引数の呼び出し AddRef を受け取るコンストラクター。 Null 以外の所有オブジェクトは、CComPtr オブジェクトの破棄時、または新しいオブジェクトが CComPtr オブジェクトに割り当てられている場合に、Release 呼び出しを取得します。

CComPtr::operator =

代入演算子。

T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();

戻り値

更新された CComPtr オブジェクトへのポインターを返します

解説

この操作によって、新しいオブジェクトに対して AddRef が行われ、存在する場合は既存のオブジェクトが解放されます。

関連項目

CComPtr::CComPtr
CComQIPtr::CComQIPtr
クラスの概要