다음을 통해 공유


CComPtr 클래스

COM 인터페이스 포인터를 관리 하는 스마트 포인터 클래스입니다.

template<
   class T 
>
class CComPtr

매개 변수

  • T
    저장 되는 포인터 유형을 지정 하는 COM 인터페이스입니다.

Members

ezzw7k98.collapse_all(ko-kr,VS.110).gifPublic 생성자

이름

설명

CComPtr::CComPtr

생성자입니다.

ezzw7k98.collapse_all(ko-kr,VS.110).gifPublic 연산자

이름

설명

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

CComQIPtr::CComQIPtr

기타 리소스

ATL 클래스 개요