Aracılığıyla paylaş


CComPtr Sınıf

COM arabirim işaretçilerini yönetmek için bir akıllı işaretçi sınıfı.

Sözdizimi

template<class T>
class CComPtr

Parametreler

T
Depolanacak işaretçi türünü belirten bir COM arabirimi.

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CComPtr::CComPtr Oluşturucu.

Ortak İşleçler

Veri Akışı Adı Açıklama
CComPtr::operator = Üye işaretçisine bir işaretçi atar.

Açıklamalar

ATL, COM arabirim işaretçilerini yönetmek için ve CComQIPtr kullanırCComPtr. Her ikisi de 'den CComPtrBasetüretilir ve her ikisi de otomatik başvuru sayma işlemi yapar.

CComPtr ve CComQIPtr sınıfları, otomatik başvuru sayımı yaparak bellek sızıntılarını ortadan kaldırmaya yardımcı olabilir. Aşağıdaki işlevlerin her ikisi de aynı mantıksal işlemleri yapar. Ancak, sınıfını kullandığından ikinci sürüm daha az hataya CComPtr açık olabilir:

// 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

Derlemelerde hata ayıklama bölümünde kod izleme için atlsd.lib bağlantısını kullanın.

Devralma Hiyerarşisi

CComPtrBase

CComPtr

Gereksinimler

Üstbilgi: atlbase.h

CComPtr::CComPtr

Oluşturucu.

CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();

Parametreler

lp
Arabirim işaretçisini başlatmak için kullanılır.

T
COM arabirimi.

Açıklamalar

Üzerinde bir bağımsız değişken çağrısı AddRef lpalan oluşturucular, bir null işaretçisi değilse. Null olmayan bir sahip olunan nesne, CComPtr nesnesinin yok edilmesi üzerine veya CComPtr nesnesine yeni bir nesne atandığında bir çağrı alır Release .

CComPtr::operator =

Atama işleci.

T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();

Dönüş Değeri

Güncelleştirilmiş CComPtr nesneye bir işaretçi döndürür

Açıklamalar

Bu işlem AddRefs yeni nesne ve varsa mevcut nesneyi serbest bırakır.

Ayrıca bkz.

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Sınıfa Genel Bakış