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.
Membuat jenis penunjuk cerdas yang mewakili antarmuka yang ditentukan oleh parameter templat. ComPtr secara otomatis mempertahankan jumlah referensi untuk penunjuk antarmuka yang mendasar dan merilis antarmuka saat jumlah referensi masuk ke nol.
Sintaks
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Parameter
T
Antarmuka yang diwakili ComPtr .
U
Kelas yang saat ini ComPtr adalah teman. (Templat yang menggunakan parameter ini dilindungi.)
Keterangan
ComPtr<> mendeklarasikan jenis yang mewakili penunjuk antarmuka yang mendasar. Gunakan ComPtr<> untuk mendeklarasikan variabel lalu gunakan operator akses anggota panah (->) untuk mengakses fungsi anggota antarmuka.
Untuk informasi selengkapnya tentang penunjuk cerdas, lihat subbagian "COM Smart Pointers" dari artikel Praktik Pengkodian COM.
Anggota
Typedef Publik
| Nama | Deskripsi |
|---|---|
InterfaceType |
Sinonim untuk jenis yang ditentukan oleh T parameter templat. |
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
ComPtr::ComPtr |
Menginisialisasi instans baru kelas ComPtr. Kelebihan beban menyediakan konstruktor default, salin, pindahkan, dan konversi. |
ComPtr::~ComPtr |
Mendeinisialisasi instans ComPtr. |
Metode Publik
| Nama | Deskripsi |
|---|---|
ComPtr::As |
Mengembalikan ComPtr objek yang mewakili antarmuka yang diidentifikasi oleh parameter templat yang ditentukan. |
ComPtr::AsIID |
Mengembalikan ComPtr objek yang mewakili antarmuka yang diidentifikasi oleh ID antarmuka yang ditentukan. |
ComPtr::AsWeak |
Mengambil referensi lemah ke objek saat ini. |
ComPtr::Attach |
Mengaitkan ini ComPtr dengan jenis antarmuka yang ditentukan oleh parameter jenis templat saat ini. |
ComPtr::CopyTo |
Menyalin antarmuka saat ini atau yang ditentukan yang terkait dengan ini ComPtr ke penunjuk output yang ditentukan. |
ComPtr::Detach |
Memisahkan ini ComPtr dari antarmuka yang diwakilinya. |
ComPtr::Get |
Mengambil penunjuk ke antarmuka yang terkait dengan ini ComPtr. |
ComPtr::GetAddressOf |
Mengambil alamat ptr_ anggota data, yang berisi penunjuk ke antarmuka yang diwakili oleh ini ComPtr. |
ComPtr::ReleaseAndGetAddressOf |
Merilis antarmuka yang terkait dengan ini ComPtr dan kemudian mengambil alamat ptr_ anggota data, yang berisi pointer ke antarmuka yang dirilis. |
ComPtr::Reset |
Merilis antarmuka yang terkait dengan ini ComPtr dan mengembalikan jumlah referensi baru. |
ComPtr::Swap |
Menukar antarmuka yang dikelola oleh saat ini ComPtr dengan antarmuka yang dikelola oleh yang ditentukan ComPtr. |
Metode yang Dilindungi
| Nama | Deskripsi |
|---|---|
ComPtr::InternalAddRef |
Menaikkan jumlah referensi antarmuka yang terkait dengan ini ComPtr. |
ComPtr::InternalRelease |
Melakukan operasi Rilis COM pada antarmuka yang terkait dengan ini ComPtr. |
Operator Publik
| Nama | Deskripsi |
|---|---|
ComPtr::operator& |
Mengambil alamat dari .ComPtr |
ComPtr::operator-> |
Mengambil penunjuk ke jenis yang ditentukan oleh parameter templat saat ini. |
ComPtr::operator= |
Menetapkan nilai ke .ComPtr |
ComPtr::operator== |
Menunjukkan apakah dua ComPtr objek sama. |
ComPtr::operator!= |
Menunjukkan apakah dua ComPtr objek tidak sama. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Menunjukkan apakah mengelola ComPtr masa pakai objek antarmuka. |
Anggota Data yang Dilindungi
| Nama | Deskripsi |
|---|---|
ComPtr::ptr_ |
Berisi penunjuk ke antarmuka yang terkait dengan, dan dikelola oleh ini ComPtr. |
Hierarki Warisan
ComPtr
Persyaratan
Header: client.h
kumpulan nama XML: Microsoft::WRL
ComPtr::~ComPtr
Mendeinisialisasi instans ComPtr.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Mengembalikan ComPtr objek yang mewakili antarmuka yang diidentifikasi oleh parameter templat yang ditentukan.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Parameter
U
Antarmuka yang akan diwakili oleh parameter p.
p
Objek ComPtr yang mewakili antarmuka yang ditentukan oleh parameter U. Parameter p tidak boleh merujuk ke objek saat ini ComPtr .
Keterangan
Templat pertama adalah formulir yang harus Anda gunakan dalam kode Anda. Templat kedua adalah spesialisasi internal pembantu. Ini mendukung fitur bahasa C++ seperti kata kunci pengurangan auto jenis.
Tampilkan Nilai
S_OK jika berhasil; jika tidak, yang HRESULT menunjukkan kesalahan.
ComPtr::AsIID
Mengembalikan ComPtr objek yang mewakili antarmuka yang diidentifikasi oleh ID antarmuka yang ditentukan.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Parameter
riid
ID antarmuka.
p
Jika objek memiliki antarmuka yang ID-nya sama dengan riid, penunjuk tidak langsung dua kali lipat ke antarmuka yang ditentukan oleh riid parameter . Jika tidak, pointer ke IUnknown.
Tampilkan Nilai
S_OK jika berhasil; jika tidak, yang HRESULT menunjukkan kesalahan.
ComPtr::AsWeak
Mengambil referensi lemah ke objek saat ini.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Parameter
pWeakRef
Ketika operasi ini selesai, penunjuk ke objek referensi yang lemah.
Tampilkan Nilai
S_OK jika berhasil; jika tidak, HRESULT yang menunjukkan kesalahan.
ComPtr::Attach
Mengaitkan ini ComPtr dengan jenis antarmuka yang ditentukan oleh parameter jenis templat saat ini.
void Attach(
_In_opt_ InterfaceType* other
);
Parameter
other
Jenis antarmuka.
ComPtr::ComPtr
Menginisialisasi instans baru kelas ComPtr. Kelebihan beban menyediakan konstruktor default, salin, pindahkan, dan konversi.
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
const ComPtr& other
);
template<class U>
WRL_NOTHROW ComPtr(
const ComPtr<U> &other,
typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
WRL_NOTHROW ComPtr(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr(
_Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
Parameter
U
Jenis other parameter.
other
Objek jenis U.
Tampilkan Nilai
Keterangan
Konstruktor pertama adalah konstruktor default, yang secara implisit membuat objek kosong. Konstruktor kedua menentukan __nullptr, yang secara eksplisit membuat objek kosong.
Konstruktor ketiga membuat objek dari objek yang ditentukan oleh penunjuk. Sekarang ComPtr memiliki memori yang ditujukan ke dan mempertahankan jumlah referensi untuk itu.
Konstruktor keempat dan kelima adalah konstruktor salinan. Konstruktor kelima menyalin objek jika dapat dikonversi ke jenis saat ini.
Konstruktor keenam dan ketujuh adalah konstruktor pemindahan. Konstruktor ketujuh memindahkan objek jika dapat dikonversi ke jenis saat ini.
ComPtr::CopyTo
Menyalin antarmuka saat ini atau yang ditentukan yang terkait dengan ini ComPtr ke penunjuk yang ditentukan.
HRESULT CopyTo(
_Deref_out_ InterfaceType** ptr
);
HRESULT CopyTo(
REFIID riid,
_Deref_out_ void** ptr
) const;
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
) const;
Parameter
U
Nama jenis.
ptr
Ketika operasi ini selesai, penunjuk ke antarmuka yang diminta.
riid
ID antarmuka.
Tampilkan Nilai
S_OK jika berhasil; jika tidak, HRESULT itu menunjukkan mengapa operasi implisit QueryInterface gagal.
Keterangan
Fungsi pertama mengembalikan salinan pointer ke antarmuka yang terkait dengan ini ComPtr. Fungsi ini selalu mengembalikan S_OK.
Fungsi kedua melakukan QueryInterface operasi pada antarmuka yang terkait dengan ini ComPtr untuk antarmuka yang ditentukan oleh riid parameter .
Fungsi ketiga melakukan operasi pada antarmuka yang QueryInterface terkait dengan ini ComPtr untuk antarmuka parameter yang U mendasar.
ComPtr::Detach
Memisahkan objek ini ComPtr dari antarmuka yang diwakilinya.
T* Detach();
Tampilkan Nilai
Penunjuk ke antarmuka yang diwakili oleh objek ini ComPtr .
ComPtr::Get
Mengambil penunjuk ke antarmuka yang terkait dengan ini ComPtr.
T* Get() const;
Tampilkan Nilai
Penunjuk ke antarmuka yang terkait dengan ini ComPtr.
ComPtr::GetAddressOf
Mengambil alamat ptr_ anggota data, yang berisi penunjuk ke antarmuka yang diwakili oleh ini ComPtr.
T* const* GetAddressOf() const;
T** GetAddressOf();
Tampilkan Nilai
Alamat variabel.
ComPtr::InternalAddRef
Menaikkan jumlah referensi antarmuka yang terkait dengan ini ComPtr.
void InternalAddRef() const;
Keterangan
Metode ini dilindungi.
ComPtr::InternalRelease
Melakukan operasi Rilis COM pada antarmuka yang terkait dengan ini ComPtr.
unsigned long InternalRelease();
Keterangan
Metode ini dilindungi.
ComPtr::operator&
Melepaskan antarmuka yang terkait dengan objek ini ComPtr lalu mengambil alamat ComPtr objek.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Tampilkan Nilai
Referensi lemah ke saat ini ComPtr.
Keterangan
Metode ini berbeda dari ComPtr::GetAddressOf dalam metode ini merilis referensi ke penunjuk antarmuka. Gunakan ComPtr::GetAddressOf saat Anda memerlukan alamat penunjuk antarmuka tetapi tidak ingin merilis antarmuka tersebut.
ComPtr::operator->
Mengambil penunjuk ke jenis yang ditentukan oleh parameter templat saat ini.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Tampilkan Nilai
Penunjuk ke jenis yang ditentukan oleh nama jenis templat saat ini.
Keterangan
Fungsi pembantu ini menghapus overhead yang tidak perlu yang disebabkan oleh penggunaan makro STDMETHOD. Fungsi ini membuat IUnknown jenis private alih-alih virtual.
ComPtr::operator=
Menetapkan nilai ke .ComPtr
WRL_NOTHROW ComPtr& operator=(
decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
_In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr<U>&& other
);
Parameter
U
Kelas.
other
Referensi pointer, referensi, atau rvalue ke jenis atau ComPtrlainnya .
Tampilkan Nilai
Referensi ke .ComPtr
Keterangan
Versi pertama operator ini menetapkan nilai kosong ke .ComPtr
Di versi kedua, jika penunjuk antarmuka yang ditetapkan tidak sama dengan penunjuk antarmuka saat ini ComPtr , penunjuk antarmuka kedua ditetapkan ke saat ini ComPtr.
Di versi ketiga, penunjuk antarmuka penetapan ditetapkan ke .ComPtr
Dalam versi keempat, jika penunjuk antarmuka dari nilai penetapan tidak sama dengan penunjuk antarmuka saat ini ComPtr , penunjuk antarmuka kedua ditetapkan ke saat ini ComPtr.
Versi kelima adalah operator salinan; referensi ke ComPtr ditetapkan ke saat ini ComPtr.
Versi keenam adalah operator salinan yang menggunakan semantik pemindahan; referensi rvalue ke ComPtr jika ada jenis yang ditransmisikan statis lalu ditetapkan ke .ComPtr
Versi ketujuh adalah operator salinan yang menggunakan semantik pemindahan; referensi rvalue ke ComPtr jenis U adalah cast statis lalu dan ditetapkan ke saat ini ComPtr.
ComPtr::operator==
Menunjukkan apakah dua ComPtr objek sama.
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
Parameter
a
Referensi ke ComPtr objek.
b
Referensi ke objek lain ComPtr .
Tampilkan Nilai
Operator pertama menghasilkan true jika objek a sama dengan objek b; jika tidak, false.
Operator kedua dan ketiga menghasilkan true jika objek a sama dengan nullptr; jika tidak, false.
ComPtr::operator!=
Menunjukkan apakah dua ComPtr objek tidak sama.
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
Parameter
a
Referensi ke ComPtr objek.
b
Referensi ke objek lain ComPtr .
Tampilkan Nilai
Operator pertama menghasilkan true jika objek a tidak sama dengan objek b; jika tidak, false.
Operator kedua dan ketiga menghasilkan true jika objek a tidak sama dengan nullptr; jika tidak, false.
ComPtr::operator Microsoft::WRL::Details::BoolType
Menunjukkan apakah mengelola ComPtr masa pakai objek antarmuka.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Tampilkan Nilai
Jika antarmuka dikaitkan dengan ini ComPtr, alamat BoolStruct::Member anggota data; jika tidak, nullptr.
ComPtr::ptr_
Berisi penunjuk ke antarmuka yang terkait dengan, dan dikelola oleh ini ComPtr.
InterfaceType *ptr_;
Keterangan
ptr_ adalah anggota data internal yang dilindungi.
ComPtr::ReleaseAndGetAddressOf
Merilis antarmuka yang terkait dengan ini ComPtr dan kemudian mengambil alamat ptr_ anggota data, yang berisi pointer ke antarmuka yang dirilis.
T** ReleaseAndGetAddressOf();
Tampilkan Nilai
Alamat ptr_ anggota data ini ComPtr.
ComPtr::Reset
Merilis antarmuka yang terkait dengan ini ComPtr dan mengembalikan jumlah referensi baru.
unsigned long Reset();
Tampilkan Nilai
Jumlah referensi yang tersisa ke antarmuka yang mendasar, jika ada.
ComPtr::Swap
Menukar antarmuka yang dikelola oleh saat ini ComPtr dengan antarmuka yang dikelola oleh yang ditentukan ComPtr.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parameter
r
ComPtr.