Bagikan melalui


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

Ruang nama: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.