分享方式:


CComPtr 類別

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

語法

template<class T>
class CComPtr

參數

T
COM 介面,指定要儲存的指標類型。

成員

公用建構函式

名稱 描述
CComPtr::CComPtr 建構函式。

公用運算子

名稱 描述
CComPtr::operator = 將指標指派給成員指標。

備註

ATL 會使用 CComPtrCComQIPtr 來管理 COM 介面指標。 兩者都是衍生自 CComPtrBase,而且兩者都會進行自動參考計數。

CComPtrCComQIPtr 類別可藉由執行自動參考計數來協助消除記憶體流失。 下列函式都會執行相同的邏輯作業。 不過,第二個版本可能較不容易發生錯誤,因為它使用 類別 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 介面。

備註

在 上接受自變數呼叫 AddReflp建構函式,如果不是 Null 指標,則為 。 非 Null 擁有的物件會在 CComPtr 物件的解構時取得 Release 呼叫,或者如果新的物件指派給 CComPtr 物件,則為 。

CComPtr::operator =

指派運算子。

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

傳回值

傳回已更新 CComPtr 物件的指標

備註

如果存在,這個作業 AddRefs 新的 物件,並釋放現有的物件。

另請參閱

CComPtr::CComPtr
CComQIPtr::CComQIPtr
類別概觀