WeakRef
kelas
Mewakili referensi lemah yang hanya dapat digunakan oleh Windows Runtime, bukan COM klasik. Referensi lemah mewakili objek yang mungkin atau mungkin tidak dapat diakses.
Sintaks
class WeakRef : public ComPtr<IWeakReference>;
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
WeakRef::WeakRef Constructor |
Menginisialisasi instans baru kelas WeakRef . |
WeakRef::~WeakRef destruktor |
Mendeinisialisasi instans WeakRef kelas saat ini. |
Metode Publik
Nama | Deskripsi |
---|---|
WeakRef::As |
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili antarmuka yang ditentukan. |
WeakRef::AsIID |
Mengatur parameter penunjuk yang ditentukan ComPtr untuk mewakili ID antarmuka yang ditentukan. |
WeakRef::CopyTo |
Menetapkan penunjuk ke antarmuka, jika tersedia, ke variabel penunjuk yang ditentukan. |
Operator publik
Nama | Deskripsi |
---|---|
WeakRef::operator& |
Mengembalikan ComPtrRef objek yang mewakili objek saat ini WeakRef . |
Keterangan
Objek WeakRef
mempertahankan referensi yang kuat, yang terkait dengan objek, dan dapat valid atau tidak valid. As()
Panggil metode atau AsIID()
untuk mendapatkan referensi yang kuat. Ketika referensi yang kuat valid, referensi tersebut dapat mengakses objek terkait. Ketika referensi yang kuat tidak valid (nullptr
), objek terkait tidak dapat diakses.
Objek WeakRef
biasanya digunakan untuk mewakili objek yang keberadaannya dikontrol oleh utas atau aplikasi eksternal. Misalnya, buat WeakRef
objek dari referensi ke objek file. Saat file terbuka, referensi yang kuat valid. Tetapi jika file ditutup, referensi yang kuat menjadi tidak valid.
Ada perubahan perilaku dalam As
metode , AsIID
, dan CopyTo
di Windows SDK. Sebelumnya, setelah memanggil salah satu metode ini, Anda dapat memeriksa WeakRef
nullptr
untuk menentukan apakah referensi yang kuat berhasil diperoleh, seperti dalam kode berikut:
WeakRef wr;
strongComptrRef.AsWeak(&wr);
// Now suppose that the object strongComPtrRef points to no longer exists
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);
// This check won't work with the Windows 10 SDK version of the library.
// Check the input pointer instead.
if(wr == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Kode di atas tidak berfungsi saat menggunakan Windows 10 SDK (atau yang lebih baru). Sebagai gantinya, periksa pointer yang diteruskan untuk nullptr
.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarki Warisan
Persyaratan
Header:client.h
Ruang nama:Microsoft::WRL
Konstruktor WeakRef::WeakRef
Menginisialisasi instans baru kelas WeakRef
.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parameter
ptr
Penunjuk, referensi, atau referensi rvalue ke objek yang ada yang menginisialisasi objek saat ini WeakRef
.
Keterangan
Konstruktor pertama menginisialisasi objek kosong WeakRef
. Konstruktor kedua menginisialisasi WeakRef
objek dari penunjuk ke IWeakReference
antarmuka. Konstruktor ketiga menginisialisasi WeakRef
objek dari referensi ke ComPtr<IWeakReference>
objek. Konstruktor keempat dan kelima menginisialisasi WeakRef
objek dari objek lain WeakRef
.
WeakRef::~WeakRef
destruktor
Mendeinisialisasi instans WeakRef
kelas saat ini.
~WeakRef();
WeakRef::As
Mengatur parameter penunjuk yang ditentukan ComPtr
untuk mewakili antarmuka yang ditentukan.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parameter
U
ID antarmuka.
ptr
Ketika operasi ini selesai, objek yang mewakili parameter U.
Nilai hasil
S_OK
jika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, danptr
diatur kenullptr
.S_OK
jika operasi ini berhasil, tetapi objek saat iniWeakRef
telah dirilis. Parameterptr
diatur kenullptr
.S_OK
jika operasi ini berhasil, tetapi objek saat iniWeakRef
tidak berasal dari parameterU
. Parameterptr
diatur kenullptr
.
Keterangan
Kesalahan dipancarkan jika parameter U
adalah IWeakReference
, atau tidak berasal dari IInspectable
.
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.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef
instans WeakRef
ke nullptr
jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa untuk nullptr
. Sebagai gantinya, periksa ptr untuk nullptr
.
WeakRef::AsIID
Mengatur parameter penunjuk yang ditentukan ComPtr
untuk mewakili ID antarmuka yang ditentukan.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parameter
riid
ID antarmuka.
ptr
Ketika operasi ini selesai, objek yang mewakili parameter riid
.
Nilai hasil
S_OK
jika operasi ini berhasil; jika tidak, HRESULT yang menunjukkan alasan operasi gagal, danptr
diatur kenullptr
.S_OK
jika operasi ini berhasil, tetapi objek saat iniWeakRef
telah dirilis. Parameterptr
diatur kenullptr
.S_OK
jika operasi ini berhasil, tetapi objek saat iniWeakRef
tidak berasal dari parameterriid
. Parameterptr
diatur kenullptr
. (Untuk informasi selengkapnya, lihat Komentar.)
Keterangan
Kesalahan dipancarkan jika parameter riid
tidak berasal dari IInspectable
. Kesalahan ini menggantikan nilai pengembalian.
Templat pertama adalah formulir yang harus Anda gunakan dalam kode Anda. Templat kedua (tidak ditampilkan di sini, tetapi dinyatakan dalam file header) adalah spesialisasi internal pembantu yang mendukung fitur bahasa C++ seperti auto
kata kunci pengurangan jenis.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef
instans WeakRef
ke nullptr
jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa untuk nullptr
. Sebagai gantinya, periksa ptr
nullptr
.
WeakRef::CopyTo
Menetapkan penunjuk ke antarmuka, jika tersedia, ke variabel penunjuk yang ditentukan.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parameter
U
Arahkan IInspectable
antarmuka. Kesalahan dipancarkan jika U
tidak berasal dari IInspectable
.
riid
ID antarmuka. Kesalahan dipancarkan jika riid
tidak berasal dari IWeakReference
.
ptr
Penunjuk tidak langsung dua kali lipat ke IInspectable
atau IWeakReference
.
Nilai hasil
S_OK
jika berhasil; jika tidak, HRESULT yang menjelaskan kegagalan. Untuk informasi selengkapnya, lihat Keterangan.
Keterangan
Nilai S_OK
pengembalian berarti bahwa operasi ini berhasil, tetapi tidak menunjukkan apakah referensi lemah diselesaikan ke referensi yang kuat. Jika S_OK
dikembalikan, uji parameter ptr
tersebut adalah referensi yang kuat; artinya, parameter ptr
tidak sama dengan nullptr
.
Mulai dari Windows 10 SDK, metode ini tidak mengatur WeakRef
instans ke nullptr
jika referensi lemah tidak dapat diperoleh, jadi Anda harus menghindari kode pemeriksaan kesalahan yang memeriksa WeakRef
untuk nullptr
. Sebagai gantinya, periksa ptr
nullptr
.
WeakRef::operator&
Mengembalikan ComPtrRef
objek yang mewakili objek saat ini WeakRef
.
Details::ComPtrRef<WeakRef> operator&() throw()
Nilai hasil
Objek ComPtrRef
yang mewakili objek saat ini WeakRef
.
Keterangan
WeakRef::operator&
adalah operator pembantu internal yang tidak dimaksudkan untuk digunakan dalam kode Anda.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk