CComPtr
クラス
COM インターフェイス ポインターを管理するためのスマート ポインター クラス。
構文
template<class T>
class CComPtr
パラメーター
T
保存するポインターの種類を指定する COM インターフェイス。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CComPtr::CComPtr |
コンストラクター。 |
パブリック演算子
名前 | 説明 |
---|---|
CComPtr::operator = |
メンバー ポインターにポインターを割り当てます。 |
解説
ATL から CComPtr
と CComQIPtr
が使用され、COM インターフェイス ポインターを管理します。 どちらも CComPtrBase
から派生し、両方とも自動参照カウントを行います。
CComPtr
と CComQIPtr
クラスは、自動参照カウントを実行することで、メモリ リークを排除するのに役立ちます。 次の関数は、どちらも同じ論理操作を行います。 ただし、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.h
CComPtr::CComPtr
コンストラクター。
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
パラメーター
lp
インターフェイス ポインターを初期化するために使用されます。
T
COM インターフェイス。
解説
Null ポインターでない場合、lp
で引数の呼び出し AddRef
を受け取るコンストラクター。 Null 以外の所有オブジェクトは、CComPtr オブジェクトの破棄時、または新しいオブジェクトが CComPtr オブジェクトに割り当てられている場合に、Release
呼び出しを取得します。
CComPtr::operator =
代入演算子。
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
戻り値
更新された CComPtr
オブジェクトへのポインターを返します
解説
この操作によって、新しいオブジェクトに対して AddRef が行われ、存在する場合は既存のオブジェクトが解放されます。