次の方法で共有


CComPtr クラス

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

template<
   class T 
>
class CComPtr

パラメーター

  • T
    COM を格納するポインターの型を指定することを実装します。

メンバー

ezzw7k98.collapse_all(ja-jp,VS.110).gifパブリック コンストラクター

名前

説明

CComPtr::CComPtr

コンストラクターです。

ezzw7k98.collapse_all(ja-jp,VS.110).gifパブリック演算子

名前

説明

CComPtr::operator =

メンバーのポインターにポインターを割り当てます。

解説

ATL を使用 CComPtrCComQIPtr は、COM を管理するポインターを実装します。両方の CComPtrBaseから派生し、両方の自動参照カウントを実行します。

CComQIPtrCComPtr とクラスは自動参照カウントを実行して、メモリ リークの削除を行うことができます。次の関数は、同じ論理演算を実行します; ただし、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.hHeader:

参照

関連項目

CComPtr::CComPtr

CComQIPtr::CComQIPtr

その他の技術情報

ATL クラスの概要