Classe de CComPtr
Uma classe inteligente do ponteiro para gerenciar ponteiros da interface COM.
template<
class T
>
class CComPtr
Parâmetros
- T
Uma interface COM que especifica o tipo de ponteiro para ser armazenado.
Membros
Construtores public
Nome |
Descrição |
---|---|
o construtor. |
Operadores públicos
Nome |
Descrição |
---|---|
Atribui um ponteiro para o ponteiro de membro. |
Comentários
Usa CComPtr e CComQIPtr de ATL gerenciar ponteiros da interface COM.Ambos são derivados de CComPtrBase, ambos e executam a contagem de referência automática.
CComPtr E as classes de CComQIPtr podem ajudar a eliminar vazamentos de memória executando a contagem de referência automática.As seguintes funções ambas executam as mesmas operações lógicas; no entanto, observe como a segunda versão pode ser menos sujeita a erros usando a classe de 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 compilações de depuração, atlsd.lib link para o rastreamento de código.
Hierarquia de herança
CComPtr
Requisitos
Cabeçalho: atlbase.h