CComPtr
類別
管理 COM 介面指標的智慧型指標類別。
語法
template<class T>
class CComPtr
參數
T
COM 介面,指定要儲存的指標類型。
成員
公用建構函式
名稱 | 描述 |
---|---|
CComPtr::CComPtr |
建構函式。 |
公用運算子
名稱 | 描述 |
---|---|
CComPtr::operator = |
將指標指派給成員指標。 |
備註
ATL 會使用 CComPtr
和 CComQIPtr
來管理 COM 介面指標。 兩者都是衍生自 CComPtrBase
,而且兩者都會進行自動參考計數。
CComPtr
和 CComQIPtr
類別可藉由執行自動參考計數來協助消除記憶體流失。 下列函式都會執行相同的邏輯作業。 不過,第二個版本可能較不容易發生錯誤,因為它使用 類別 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 以進行程式代碼追蹤。
繼承階層架構
CComPtr
需求
標頭: atlbase.h
CComPtr::CComPtr
建構函式。
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
參數
lp
用來初始化介面指標。
T
COM 介面。
備註
在 上接受自變數呼叫 AddRef
的 lp
建構函式,如果不是 Null 指標,則為 。 非 Null 擁有的物件會在 CComPtr 物件的解構時取得 Release
呼叫,或者如果新的物件指派給 CComPtr 物件,則為 。
CComPtr::operator =
指派運算子。
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
傳回值
傳回已更新 CComPtr
物件的指標
備註
如果存在,這個作業 AddRefs 新的 物件,並釋放現有的物件。