Kelas ComPtr
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 ComPtr
lainnya .
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
.