CComPtr クラス
COM インターフェイス ポインターを管理するためのスマート ポインター クラスです。
template<
class T
>
class CComPtr
パラメーター
- T
COM を格納するポインターの型を指定することを実装します。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
コンストラクターです。 |
パブリック演算子
名前 |
説明 |
---|---|
メンバーのポインターにポインターを割り当てます。 |
解説
ATL を使用 CComPtr と CComQIPtr は、COM を管理するポインターを実装します。両方の CComPtrBaseから派生し、両方の自動参照カウントを実行します。
CComQIPtr の CComPtr とクラスは自動参照カウントを実行して、メモリ リークの削除を行うことができます。次の関数は、同じ論理演算を実行します; ただし、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。
継承階層
CComPtr
必要条件
atlbase.hHeader: