Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.