System::SmartPtr sınıfı

SmartPtr class

Yığın üzerinde tahsis edilen tipleri saran gösterici sınıfı. Object sınıfından türeten sınıfların belleğini yönetmek için kullanın. Bu gösterici türü, iç içe gösterici (intrusive pointer) semantiğini izler. Referans sayacı, Object içinde ya da Object örneğine sıkı bağlı bir sayaç yapısında depolanır. Her durumda, tüm SmartPtr örnekleri, nasıl oluşturulurlarsa oluşturulsunlar tek sahiplik grubu oluşturur; bu, std::shared_ptr sınıfının davranışından farklıdır. Ham göstericiyi SmartPtr içine 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ı gösterici ve zayıf gösterici. Nesneyi canlı tutmak için paylaşımlı referans sayısının pozitif olması gerekir. Hem zayıf hem de paylaşımlı göstericiler, işaret edilen nesneye (yöntem çağırmak, alanları okumak ya da yazmak vb.) erişmek için kullanılabilir, ancak zayıf göstericiler paylaşımlı gösterici referans sayımına katılmaz. Object nesnesi, ona ait son ‘shared’ SmartPtr göstericisi yok edildiğinde silinir. Bu yüzden, nesnenin başka paylaşımlı SmartPtr göstericisi bulunmadığında, örneğin nesne oluşturulurken ya da yok edilirken, bunun gerçekleşmemesini sağlayın. Bu sorunu düzeltmek için System::Object::ThisProtector koruma nesnelerini (C++ kodunda) veya CppCTORSelfReference ya da CppSelfReference özniteliğini (çevirisi yapılan C# kodunda) kullanın. Benzer şekilde, döngüsel referansları kırmak için System::WeakPtr gösterici sınıfını veya System::SmartPtrMode::Weak gösterici modunu (C++ kodunda) ya da CppWeakPtr özniteliğini (C# kodunda) kullanın. İki ya da daha fazla nesne ‘shared’ göstericilerle birbirine referans verirse, hiç silinmezler. Gösterici türü (zayıf ya da paylaşımlı) çalışma zamanında değiştirilecekse, System::SmartPtr::set_Mode() yöntemini veya System::DynamicWeakPtr sınıfını kullanın. SmartPtr sınıfı hiçbir sanal yöntem içermez. Kendi bellek yönetim stratejinizi oluşturuyorsanız yalnızca onu miras almanız gerekir. Bu tür, diğer nesnelerin silinmesini yönetmek için bir göstericidir. Yığıt üzerinde (stack) ayrılmalı ve fonksiyonlara değer olarak ya da const referansla geçirilmelidir.

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

Yöntemler

YöntemAçıklama
begin()begin() metoduna erişim sağlayıcı, temel bir koleksiyon için. Sadece SmartPtr_ begin() metoduna sahip bir özelleştirme türü ise derlenir.
begin() constbegin() metoduna erişim sağlayıcı, temel bir koleksiyon için. Sadece SmartPtr_ begin() metoduna sahip bir özelleştirme türü ise derlenir.
Cast() constGöstericiyi kendi tipine dönüştürür.
Cast() constGöstericiyi static_cast kullanarak temel tipe dönüştürür.
Cast() constGöstericiyi dynamic_cast kullanarak türetilmiş tipe dönüştürür.
Cast() constGöstericiyi dynamic_cast kullanarak türetilmiş tipe dönüştürür.
cbegin() constcbegin() metoduna erişim sağlayıcı, temel bir koleksiyon için. Sadece SmartPtr_ cbegin() metoduna sahip bir özelleştirme türü ise derlenir.
cend() constcend() metoduna erişim sağlayıcı, temel bir koleksiyon için. Sadece SmartPtr_ cend() metoduna sahip bir özelleştirme türü ise derlenir.
const_pointer_cast() constGöstericiyi, işaret edilen nesne üzerinde const_cast kullanarak farklı bir tipe dönüştürür.
dynamic_pointer_cast() constGöstericiyi, işaret edilen nesne üzerinde dynamic_cast kullanarak farklı bir tipe dönüştürür.
end()Alt koleksiyonun end() metoduna erişimci. Yalnızca SmartPtr_ end() metoduna sahip bir özelleştirme türü ise derlenir.
end() constAlt koleksiyonun end() metoduna erişimci. Yalnızca SmartPtr_ end() metoduna sahip bir özelleştirme türü ise 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çi sayısını, mevcut olan 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 türde ya da onun alt türünde olup olmadığını kontrol eder. C# ‘is’ semantiğini izler.
IsAliasingPtr() constİşaretçinin, sahip olduğu nesneden (aliasing yapıcıyla oluşturulan) başka bir nesneye işaret edip etmediğini kontrol eder.
IsShared() constİşaretçinin paylaşımlı modda olup olmadığını kontrol eder.
IsWeak() constİşaretçinin zayıf 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 semantiği sağlar.
operator<(SmartPtr<Y> const&) constSmartPtr sınıfı için daha az karşılaştırma 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 tür 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 takma adlamayı (takma ad oluşturucu tarafından oluşturulan) kaldırır, işaret ettiği aynı nesneyi (paylaşıldıysa yönetir) veya (zayıfsa izler) emin olur.
reset(Pointee_ *)İşaret edilen nesneyi ayarlar.
reset()İşaretçiyi nullptr’ye işaret edecek şekilde yapar.
set_Mode(SmartPtrMode)İşaretçi modunu ayarlar. Referans verilen nesnenin referans sayılarını değiştirebilir.
SetContainedTemplateWeakPtr(uint32_t) constİşaret edilen nesnede (varsa) SetTemplateWeakPtr() metodunu çağırır.
SmartPtr(SmartPtrMode)Gerekli modda bir SmartPtr nesnesi oluşturur.
SmartPtr(std::nullptr_t, SmartPtrMode)Gerekli modda null işaretçi bir 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)SmartPtr nesnesini kopya yapıcıyla oluşturur. Her iki işaretçi de sonrasında aynı nesneyi işaret eder.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)SmartPtr nesnesini kopya yapıcıyla oluşturur. Her iki işaretçi de sonrasında aynı nesneyi işaret eder. İzin verildiğinde tip dönüşümü yapar.
SmartPtr(SmartPtr_&&, SmartPtrMode)SmartPtr nesnesini taşıma yapıcıyla oluşturur. Etkili olarak, iki işaretçi aynı moddaysa 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 mevcut olduğunda 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çi haline 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 özel bir türse Pointee_ ile aynı, aksi takdirde void.
Pointee_İşaret edilen tip.
SmartPtr_Özelleştirilmiş akıllı işaretçi türü.
ValueTypeİşaret edilen dizinin depolama tipi. Yalnızca T, System::Array özel bir türse anlamlıdır.

Ayrıca Bakınız