用于管理 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 接口。
备注
在 lp 上采用参数调用 AddRef 的构造函数(如果不是 null 指针)。 在 CComPtr 对象销毁时,或者如果向 CComPtr 对象分配了一个新对象,非 null 拥有的对象会获取 Release 调用。
 CComPtr::operator =
赋值运算符。
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
返回值
返回指向更新后的 CComPtr 对象的指针
备注
此操作对新对象执行 AddRefs 并释放现有对象(如果存在)。