Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classe
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.