Bagikan melalui


CComPtr Kelas

Kelas penunjuk cerdas untuk mengelola penunjuk antarmuka COM.

Sintaks

template<class T>
class CComPtr

Parameter

T
Antarmuka COM yang menentukan jenis penunjuk yang akan disimpan.

Anggota

Konstruktor Publik

Nama Deskripsi
CComPtr::CComPtr Konstruktor.

Operator Publik

Nama Deskripsi
CComPtr::operator = Menetapkan penunjuk ke penunjuk anggota.

Keterangan

ATL menggunakan CComPtr dan CComQIPtr untuk mengelola penunjuk antarmuka COM. Keduanya berasal dari CComPtrBase, dan keduanya melakukan penghitungan referensi otomatis.

Kelas CComPtr dan CComQIPtr dapat membantu menghilangkan kebocoran memori dengan melakukan penghitungan referensi otomatis. Fungsi berikut keduanya melakukan operasi logis yang sama. Namun, versi kedua mungkin kurang rentan terhadap kesalahan karena menggunakan CComPtr kelas :

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

Di Build debug, tautkan atlsd.lib untuk pelacakan kode.

Hierarki Warisan

CComPtrBase

CComPtr

Persyaratan

Header:atlbase.h

CComPtr::CComPtr

Konstruktor.

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

Parameter

lp
Digunakan untuk menginisialisasi penunjuk antarmuka.

T
Antarmuka COM.

Keterangan

Konstruktor yang mengambil panggilan AddRef argumen pada lp, jika bukan penunjuk null. Objek yang dimiliki non-null mendapatkan Release panggilan atas penghancuran objek CComPtr, atau jika objek baru ditetapkan ke objek CComPtr.

CComPtr::operator =

Operator penugasan.

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

Tampilkan Nilai

Mengembalikan penunjuk ke objek yang diperbarui CComPtr

Keterangan

Operasi ini MenambahkanRefs objek baru dan merilis objek yang ada, jika ada.

Baca juga

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Gambaran Umum Kelas