System::SmartPtr sınıfı

SmartPtr class

Yığın üzerinde tahsis edilen tipleri saran bir işaretçi sınıfı. Object sınıfını miras alan sınıfların belleğini yönetmek için kullanın. Bu işaretçi türü, içsel işaretçi semantiğini izler. Referans sayacı, ya Object içinde ya da Object örneğine sıkı bir şekilde bağlı sayaç yapısında depolanır. Her durumda, tüm SmartPtr örnekleri, nasıl oluşturulurlarsa oluştursunlar tek sahiplik grubu oluşturur; bu, std::shared_ptr sınıfının davranışının tersidir. Ham işaretçiyi SmartPtr’ye dönüştürmek, aynı nesneye ortak referanslar tutan diğer SmartPtr örnekleri olduğu sürece güvenlidir. SmartPtr sınıfı örneği iki durumdan birinde olabilir: paylaşımlı işaretçi ve zayıf işaretçi. Nesnenin yaşamını sürdürmek için, ona olan paylaşımlı referans sayısının pozitif olması gerekir. Hem zayıf hem de paylaşımlı işaretçiler, işaret edilen nesneye (metot çağırmak, alanları okumak ya da yazmak vb.) erişmek için kullanılabilir, ancak zayıf işaretçiler paylaşımlı işaretçi referans sayımına katılmaz. Object nesnesi, ona olan son ‘shared’ SmartPtr işaretçisi yok edildiğinde silinir. Bu yüzden, nesneye başka paylaşımlı SmartPtr işaretçisi bulunmadığı durumlarda, örneğin nesne oluşturulurken ya da yok edilirken, bunun gerçekleşmediğinden emin olun. Bu sorunu çözmek için System::Object::ThisProtector koruma nesnelerini (C++ kodunda) veya CppCTORSelfReference ya da CppSelfReference özniteliğini (çevirilen C# kodunda) kullanın. Benzer şekilde, döngü referanslarını kırmak için System::WeakPtr işaretçi sınıfını veya System::SmartPtrMode::Weak işaretçi modunu (C++ kodunda) ya da CppWeakPtr özniteliğini (çevirilen C# kodunda) kullanın. İki ya da daha fazla nesne ‘shared’ işaretçileri kullanarak birbirlerine referans verirlerse, hiç silinmezler. Çalışma zamanında işaretçi türü (zayıf ya da paylaşımlı) değiştirilmesi gerekiyorsa, System::SmartPtr::set_Mode() metodunu veya System::DynamicWeakPtr sınıfını kullanın. SmartPtr sınıfı herhangi bir sanal metoda sahip değildir. Bunu yalnızca kendi bellek yönetimi stratejinizi oluşturuyorsanız miras almanız gerekir. Bu tür, diğer nesnelerin silinmesini yönetmek için bir işaretçidir. Yığıt üzerinde tahsis edilmeli ve fonksiyonlara değer olarak ya da const referansla geçirilmelidir.

template<class T>class SmartPtr
ParameterAçıklama
Tİşaret edilen nesnenin tipi. Ya System::Object ya da onun bir alt sınıfı olmalıdır.

Yöntemler

YöntemAçıklama
begin()begin() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ begin() metoduna sahip bir özelleştirme türü olduğunda derlenir.
begin() constbegin() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ begin() metoduna sahip bir özelleştirme türü olduğunda derlenir.
Cast() constİşaretçiyi kendi tipine dönüştürür.
Cast() constİşaretçiyi static_cast kullanarak temel tipe dönüştürür.
Cast() constİşaretçiyi dynamic_cast kullanarak türetilmiş tipe dönüştürür.
Cast() constİşaretçiyi dynamic_cast kullanarak türetilmiş tipe dönüştürür.
cbegin() constcbegin() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ cbegin() metoduna sahip bir özelleştirme türü olduğunda derlenir.
cend() constcend() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ cend() metoduna sahip bir özelleştirme türü olduğunda derlenir.
const_pointer_cast() constİşaret edilen nesne üzerinde const_cast kullanarak işaretçiyi farklı bir tipe dönüştürür.
dynamic_pointer_cast() constİşaret edilen nesne üzerinde dynamic_cast kullanarak işaretçiyi farklı bir tipe dönüştürür.
end()end() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ end() metoduna sahip bir özelleştirme türü olduğunda derlenir.
end() constend() metoduna erişim sağlayan alt koleksiyon. Yalnızca SmartPtr_ end() metoduna sahip bir özelleştirme türü olduğunda derlenir.
get() constİşaret edilen nesneyi alır.
get_Mode() constİşaretçi modunu alır.
get_shared() constİşaret edilen nesneyi alır, ancak işaretçinin paylaşımlı modda olduğunu doğrular.
get_shared_count() constReferans verilen nesneye mevcut olan paylaşımlı işaretçilerin sayısını, mevcut işaretçi dahil, alır. Mevcut işaretçinin paylaşımlı modda olduğunu doğrular.
GetHashCode() constİşaret edilen nesne üzerinde GetHashCode() çağırır.
GetObjectNotNull() constŞu anda referans verilen nesneyi (varsa) alır veya bir istisna fırlatır.
GetObjectOrNull() constİşaret edilen nesneyi (varsa) alır veya nullptr döndürür. get() ile aynı.
GetObjectOwner() constReferans verilen nesneyi alır.
GetPointer() constİşaret edilen nesneyi (varsa) alır veya nullptr döndürür. get() ile aynı.
Is(const System::TypeInfo&) constİşaret edilen nesnenin belirli bir tipte veya onun alt tipinde olup olmadığını kontrol eder. C# ‘is’ semantiğini izler.
IsAliasingPtr() constİşaretçinin, sahip olduğu nesne yerine başka bir nesneye işaret edip etmediğini (aliasing yapıcıyla oluşturulan) kontrol eder.
IsShared() constİşaretçinin paylaşımlı modda olup olmadığını kontrol eder.
IsWeak() constİşaretçinin zayıf (weak) modda olup olmadığını kontrol eder.
explicit operator bool() constİşaretçinin null olmadığını kontrol eder.
operator!() constİşaretçinin null olup olmadığını kontrol eder.
operator*() constİşaret edilen nesneye referansı alır. İşaretçinin null olmadığını doğrular.
operator->() constReferans verilen nesnenin üyelerine erişime izin verir.
operator<(Y *) constSmartPtr sınıfı için daha az karşılaştırma (less) semantiği sağlar.
operator<(SmartPtr<Y> const&) constSmartPtr sınıfı için daha az karşılaştırma (less) semantiği sağlar.
operator=(SmartPtr_&&)SmartPtr nesnesine taşıma ataması yapar. x kullanılamaz hâle gelir.
operator=(const SmartPtr_&)SmartPtr nesnesine kopya ataması yapar.
operator=(const SmartPtr<Q>&)SmartPtr nesnesine kopya ataması yapar. Gerekli tip dönüşümlerini gerçekleştirir.
operator=(Pointee_ *)Ham işaretçiyi SmartPtr nesnesine atar.
operator=(std::nullptr_t)İşaretçi değerini nullptr olarak ayarlar.
operator==(std::nullptr_t) constİşaretçinin nullptr’ye işaret edip etmediğini kontrol eder.
operator[](IdxType) constDizi elemanları için erişimci. Yalnızca SmartPtr_ System::Array özelleştirmesi ise derlenir.
RemoveAliasing() constİşaretçiden aliasing’i (aliasing yapıcıyla oluşturulan) kaldırır, işaret ettiği aynı nesneyi (paylaşımlıysa yönetir, zayıfsa izler) sağladığından emin olur.
reset(Pointee_ *)İşaret edilen nesneyi ayarlar.
reset()İşaretçiyi nullptr’ye işaret edecek şekilde ayarlar.
set_Mode(SmartPtrMode)İşaretçi kipini ayarlar. Referans verilen nesnenin referans sayısını değiştirebilir.
SetContainedTemplateWeakPtr(uint32_t) constİşaret edilen nesnede (varsa) SetTemplateWeakPtr() metodunu çağırır.
SmartPtr(SmartPtrMode)Gerekli kipte bir SmartPtr nesnesi oluşturur.
SmartPtr(std::nullptr_t, SmartPtrMode)Gerekli kipte bir null işaretçi SmartPtr nesnesi oluşturur.
SmartPtr(Pointee_ *, SmartPtrMode)Belirtilen nesneyi işaret eden bir SmartPtr oluşturur veya ham işaretçiyi SmartPtr tipine dönüştürür.
SmartPtr(const SmartPtr_&, SmartPtrMode)Bir SmartPtr nesnesini kopya olarak oluşturur. Her iki işaretçi de sonrasında aynı nesneyi gösterir.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Bir SmartPtr nesnesini kopya olarak oluşturur. Her iki işaretçi de sonrasında aynı nesneyi gösterir. İzin verildiğinde tip dönüşümü gerçekleştirir.
SmartPtr(SmartPtr_&&, SmartPtrMode)Bir SmartPtr nesnesini taşıma yoluyla oluşturur. Etkili olarak, iki işaretçi aynı kipteyse yer değiştirir. Çağrıdan sonra x kullanılmaz hale gelebilir.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Referans verilen dizinin tipini, farklı tipte yeni bir dizi oluşturarak dönüştürür. C#’ta desteklenmeyen bir dizi tip dönüşümü C++‘ta mevcutsa faydalıdır.
explicit SmartPtr(const Y&)Boş bir dizi başlatır. Bazı C# kod yapılarının çevrilmesinde kullanılır.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)ptr’nin ilk değeriyle sahiplik bilgisini paylaşan, ancak alakasız ve yönetilmeyen bir p işaretçisi tutan bir SmartPtr oluşturur.
static_pointer_cast() constİşaret edilen nesne üzerinde static_cast kullanarak işaretçiyi farklı bir tipe dönüştürür.
ToObjectPtr() constHerhangi bir işaretçi tipini Object tipine işaretçiye dönüştürür. Pointee_ tipinin tam olmasını gerektirmez.
static Type()Pointee_ tipi için System::TypeInfo nesnesini almanın kısayolu.
~SmartPtr()SmartPtr nesnesini yok eder. Gerekirse, işaret edilen nesnenin referans sayacını azaltır ve nesneyi siler.

Typedefs

TypedefAçıklama
ArrayTypeSystem::Array özelleştirmesi ise Pointee_‘ye eşittir, aksi takdirde void döner.
Pointee_İşaret edilen tip.
SmartPtr_Özelleştirilmiş akıllı işaretçi tipi.
ValueTypeİşaret edilen dizinin depolama tipi. Yalnızca T, System::Array özelleştirmesi ise anlamlıdır.

Ayrıca Bakınız