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