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 接口。

备注

lp 上采用参数调用 AddRef 的构造函数(如果不是 null 指针)。 在 CComPtr 对象销毁时,或者如果向 CComPtr 对象分配了一个新对象,非 null 拥有的对象会获取 Release 调用。

CComPtr::operator =

赋值运算符。

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

返回值

返回指向更新后的 CComPtr 对象的指针

备注

此操作对新对象执行 AddRefs 并释放现有对象(如果存在)。

另请参阅

CComPtr::CComPtr
CComQIPtr::CComQIPtr
类概述