Kelas System::SmartPtr

SmartPtr class

Kelas pointer untuk membungkus tipe yang dialokasikan di heap. Gunakan untuk mengelola memori kelas yang mewarisi Object. Tipe pointer ini mengikuti semantik pointer intrusif. Penghitung referensi disimpan baik di dalam Object itu sendiri atau dalam struktur penghitung yang terikat erat pada instance Object. Dalam hal apa pun, semua instance SmartPtr membentuk grup kepemilikan tunggal terlepas dari bagaimana mereka dibuat, yang berbeda dengan perilaku kelas std::shared_ptr. Mengonversi pointer mentah ke SmartPtr aman asalkan ada instance SmartPtr lain yang memegang referensi bersama ke objek yang sama. Instance kelas SmartPtr dapat berada dalam satu dari dua keadaan: pointer bersama dan pointer lemah. Agar objek tetap hidup, harus ada jumlah referensi bersama ke objek tersebut positif. Baik pointer lemah maupun bersama dapat digunakan untuk mengakses objek yang ditunjuk (untuk memanggil metode, membaca atau menulis bidang, dll.), tetapi pointer lemah tidak berpartisipasi dalam penghitung referensi pointer bersama. Object dihapus ketika pointer ‘shared’ SmartPtr terakhir ke objek tersebut dihancurkan. Jadi, pastikan hal ini tidak terjadi ketika tidak ada pointer SmartPtr bersama lain ke objek, misalnya selama konstruksi atau penghancuran objek. Gunakan objek penjaga System::Object::ThisProtector (dalam kode C++) atau atribut CppCTORSelfReference atau CppSelfReference (dalam kode C# yang diterjemahkan) untuk memperbaiki masalah ini. Demikian pula, pastikan memutuskan referensi siklus dengan menggunakan kelas pointer System::WeakPtr atau mode pointer System::SmartPtrMode::Weak (dalam kode C++) atau atribut CppWeakPtr (dalam kode C# yang diterjemahkan). Jika dua atau lebih objek saling merujuk menggunakan pointer ‘shared’, mereka tidak akan pernah dihapus. Jika tipe pointer (lemah atau bersama) harus diganti pada waktu berjalan, gunakan metode System::SmartPtr::set_Mode() atau kelas System::DynamicWeakPtr. Kelas SmartPtr tidak mengandung metode virtual apa pun. Anda hanya harus mewarisinya jika Anda membuat strategi manajemen memori sendiri. Tipe ini adalah pointer untuk mengelola penghapusan objek lain. Itu harus dialokasikan di stack dan diteruskan ke fungsi baik dengan nilai atau dengan referensi konstan.

template<class T>class SmartPtr
ParameterDeskripsi
TTipe dari objek yang ditunjuk. Harus berupa System::Object atau subclass-nya.

Metode

MetodeDeskripsi
begin()Akses ke metode begin() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode begin().
begin() constAkses ke metode begin() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode begin().
Cast() constMengubah tipe pointer ke tipe aslinya.
Cast() constMengubah tipe pointer ke tipe dasar menggunakan static_cast.
Cast() constMengubah tipe pointer ke tipe turunan menggunakan dynamic_cast.
Cast() constMengubah tipe pointer ke tipe turunan menggunakan dynamic_cast.
cbegin() constAkses ke metode cbegin() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode cbegin().
cend() constAkses ke metode cend() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode cend().
const_pointer_cast() constMengubah tipe pointer ke tipe lain menggunakan const_cast pada objek yang ditunjuk.
dynamic_pointer_cast() constMengubah tipe pointer ke tipe lain menggunakan dynamic_cast pada objek yang ditunjuk.
end()Akses ke metode end() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode end().
end() constAkses ke metode end() dari koleksi yang mendasari. Hanya dapat dikompilasi jika SmartPtr_ adalah tipe spesialisasi dengan metode end().
get() constMendapatkan objek yang ditunjuk.
get_Mode() constMendapatkan mode pointer.
get_shared() constMendapatkan objek yang ditunjuk, tetapi memastikan bahwa pointer berada dalam mode berbagi.
get_shared_count() constMendapatkan jumlah pointer berbagi yang ada pada objek yang direferensikan, termasuk yang saat ini. Memastikan pointer saat ini berada dalam mode berbagi.
GetHashCode() constMemanggil GetHashCode() pada objek yang ditunjuk.
GetObjectNotNull() constMendapatkan objek yang saat ini direferensikan (jika ada) atau melempar pengecualian.
GetObjectOrNull() constMendapatkan objek yang ditunjuk (jika ada) atau nullptr. Sama dengan get().
GetObjectOwner() constMendapatkan objek yang direferensikan.
GetPointer() constMendapatkan objek yang ditunjuk (jika ada) atau nullptr. Sama dengan get().
Is(const System::TypeInfo&) constMemeriksa apakah objek yang ditunjuk berjenis tipe tertentu atau tipe turunannya. Mengikuti semantik C# ‘is’.
IsAliasingPtr() constMemeriksa apakah pointer menunjuk ke objek lain selain yang dimiliki (dibuat oleh konstruktor aliasing).
IsShared() constMemeriksa apakah pointer berada dalam mode berbagi.
IsWeak() constMemeriksa apakah pointer berada dalam mode lemah.
explicit operator bool() constMemeriksa apakah pointer tidak null.
operator!() constMemeriksa apakah pointer null.
operator*() constMendapatkan referensi ke objek yang ditunjuk. Memastikan bahwa pointer tidak null.
operator->() constMemungkinkan mengakses anggota dari objek yang direferensikan.
operator<(Y *) constMenyediakan semantik perbandingan kurang untuk kelas SmartPtr.
operator<(SmartPtr<Y> const&) constMenyediakan semantik perbandingan kurang untuk kelas SmartPtr.
operator=(SmartPtr_&&)Melakukan penugasan pindah pada objek SmartPtr. x menjadi tidak dapat digunakan.
operator=(const SmartPtr_&)Menugaskan salinan pada objek SmartPtr.
operator=(const SmartPtr<Q>&)Menugaskan salinan pada objek SmartPtr. Melakukan konversi tipe yang diperlukan.
operator=(Pointee_ *)Menetapkan pointer mentah ke objek SmartPtr.
operator=(std::nullptr_t)Mengatur nilai pointer menjadi nullptr.
operator==(std::nullptr_t) constMemeriksa apakah pointer menunjuk ke nullptr.
operator[](IdxType) constAkses ke elemen array. Hanya dapat dikompilasi jika SmartPtr_ adalah spesialisasi dari System::Array.
RemoveAliasing() constMenghapus aliasing (yang dibuat oleh konstruktor aliasing) dari pointer, memastikan bahwa ia mengelola (jika berbagi) atau melacak (jika lemah) objek yang sama yang ditunjuknya.
reset(Pointee_ *)Mengatur objek yang ditunjuk.
reset()Membuat pointer menunjuk ke nullptr.
set_Mode(SmartPtrMode)Mengatur mode penunjuk. Mungkin mengubah hitungan referensi objek yang dirujuk.
SetContainedTemplateWeakPtr(uint32_t) constMemanggil metode SetTemplateWeakPtr() pada objek yang ditunjuk (jika ada).
SmartPtr(SmartPtrMode)Membuat objek SmartPtr dengan mode yang diperlukan.
SmartPtr(std::nullptr_t, SmartPtrMode)Membuat objek SmartPtr null-pointer dengan mode yang diperlukan.
SmartPtr(Pointee_ *, SmartPtrMode)Membuat SmartPtr yang menunjuk ke objek yang ditentukan, atau mengonversi penunjuk mentah ke SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Menyusun salinan objek SmartPtr. Kedua penunjuk menunjuk ke objek yang sama setelahnya.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Menyusun salinan objek SmartPtr. Kedua penunjuk menunjuk ke objek yang sama setelahnya. Melakukan konversi tipe jika diizinkan.
SmartPtr(SmartPtr_&&, SmartPtrMode)Menyusun objek SmartPtr dengan pemindahan. Secara efektif, menukar dua penunjuk, jika keduanya berada dalam mode yang sama. x mungkin tidak dapat digunakan setelah pemanggilan.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Mengonversi tipe array yang dirujuk dengan membuat array baru dengan tipe berbeda. Berguna jika di C# terdapat cast tipe array yang tidak didukung di C++.
explicit SmartPtr(const Y&)Menginisialisasi array kosong. Digunakan untuk menerjemahkan beberapa konstruksi kode C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Menyusun sebuah SmartPtr yang berbagi informasi kepemilikan dengan nilai awal ptr, tetapi memegang penunjuk p yang tidak terkait dan tidak dikelola.
static_pointer_cast() constMencast penunjuk ke tipe berbeda menggunakan static_cast pada objek yang ditunjuk.
ToObjectPtr() constMengonversi tipe penunjuk apa pun menjadi penunjuk ke Object. Tidak memerlukan tipe Pointee_ lengkap.
static Type()Jalan pintas untuk mendapatkan objek System::TypeInfo untuk tipe Pointee_.
~SmartPtr()Menghancurkan objek SmartPtr. Jika diperlukan, mengurangi penghitung referensi objek yang ditunjuk dan menghapus objek.

Typedefs

TypedefDeskripsi
ArrayTypeSama dengan Pointee_, jika itu merupakan spesialisasi dari System::Array, dan void jika tidak.
Pointee_Tipe yang ditunjuk.
SmartPtr_Tipe penunjuk pintar khusus.
ValueTypeTipe penyimpanan array yang ditunjuk. Hanya bermakna jika T merupakan spesialisasi dari System::Array.

Lihat Juga