Classe CComPtr
Uma classe de ponteiro inteligente para gerenciar ponteiros de interface COM.
Sintaxe
template<class T>
class CComPtr
Parâmetros
T
Uma interface COM especificando o tipo de ponteiro a ser armazenado.
Membros
Construtores públicos
Nome | Descrição |
---|---|
CComPtr::CComPtr |
O construtor . |
Operadores públicos
Nome | Descrição |
---|---|
CComPtr::operator = |
Atribui um ponteiro ao ponteiro do membro. |
Comentários
A ATL usa CComPtr
e CComQIPtr
para gerenciar ponteiros de interface COM. Ambos são derivados de CComPtrBase
e ambos fazem contagem automática de referências.
As classes CComPtr
e CComQIPtr
podem ajudar a eliminar perda de memória ao executar a contagem automática de referências. As funções a seguir fazem as mesmas operações lógicas. No entanto, a segunda versão pode ser menos propensa a erros, pois usa a classe 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
Em builds de depuração, vincule atlsd.lib para rastreamento de código.
Hierarquia de herança
CComPtr
Requisitos
Cabeçalho: atlbase.h
CComPtr::CComPtr
O construtor .
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parâmetros
lp
Usado para inicializar o ponteiro da interface.
T
A interface COM.
Comentários
Os construtores que usarão uma chamada AddRef
de argumento em lp
, se ela não for um ponteiro nulo. Um objeto próprio não nulo receberá uma chamada Release
após a destruição do objeto CComPtr ou se um novo objeto for atribuído ao objeto CComPtr.
CComPtr::operator =
Operador de atribuição.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Valor de retorno
Retorna um ponteiro para o objeto CComPtr
atualizado.
Comentários
Essa operação (AddRefs) adiciona referências ao novo objeto e libera o objeto existente, se houver um.