Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Uma classe de ponteiro inteligente para gerir ponteiros de interface COM.
Sintaxe
template<class T>
class CComPtr
Parâmetros
T
Uma interface COM que especifica o tipo de ponteiro a ser armazenado.
Membros
Construtores Públicos
| Nome | Description |
|---|---|
CComPtr::CComPtr |
O construtor. |
Operadores Públicos
| Nome | Description |
|---|---|
CComPtr::operator = |
Atribui um ponteiro ao ponteiro membro. |
Observações
O ATL utiliza CComPtr e CComQIPtr para gerir ponteiros de interface COM. Ambos derivam de CComPtrBase, e ambos fazem contagem automática de referências.
As CComPtr classes and CComQIPtr podem ajudar a eliminar fugas de memória ao realizar contagem automática de referências. As funções seguintes executam as mesmas operações lógicas. No entanto, a segunda versão pode ser menos propensa a erros porque utiliza a CComPtr classe:
// 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 compilações de Depuração, liga atlsd.lib para rastreamento de código.
Hierarquia de herança
CComPtr
Requerimentos
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 de interface.
T
Uma interface COM.
Observações
Os construtores que aceitam um argumento chamam AddRef em lp, se não for um ponteiro nulo. Um objeto não detido por null recebe uma Release chamada aquando da 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
Devolve um ponteiro para o objeto atualizado CComPtr
Observações
Esta operação AddRefs o novo objeto e liberta o objeto existente, caso exista.
Consulte também
CComPtr::CComPtr
CComQIPtr::CComQIPtr
Visão geral da classe