共用方式為


CComPtr 類別

處理的 COM 介面指標的智慧型指標類別。

template<
   class T 
>
class CComPtr

參數

  • T
    指定指標型別 COM 介面的值。

Members

ezzw7k98.collapse_all(zh-tw,VS.110).gif公用建構函式

名稱

描述

CComPtr::CComPtr

建構函式。

ezzw7k98.collapse_all(zh-tw,VS.110).gif公用運算子

名稱

描述

CComPtr::operator =

將成員指標的指標。

備註

ATL 會 CComPtrCComQIPtr 處理 COM 介面指標。 兩個從衍生的型別, CComPtrBase,而且同時執行自動參考計數。

CComPtrCComQIPtr 類別可以藉由執行自動參考計數減少記憶體遺漏 (Memory Leak)。 下列兩個函式執行相同的邏輯作業,但是請注意,第二個版本可能會如何比較不容易出錯的使用 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

需求

Header: atlbase.h

請參閱

參考

CComPtr::CComPtr

CComQIPtr::CComQIPtr

其他資源

ATL 類別概觀