فئة System::SmartPtr

SmartPtr class

فئة مؤشر لتغليف الأنواع التي تُخصص على الكومة. استخدمها لإدارة الذاكرة للفئات التي ترث Object. يتبع هذا النوع من المؤشرات دلالات المؤشر المتسلل. يتم تخزين عداد المرجع إما في Object نفسه أو في بنية العداد المرتبطة بكيان Object بإحكام. على أي حال، جميع مثيلات SmartPtr تُشكل مجموعة ملكية واحدة بغض النظر عن طريقة إنشائها، وهذا يختلف عن سلوك فئة std::shared_ptr. تحويل المؤشر الخام إلى SmartPtr آمن طالما توجد مثيلات SmartPtr أخرى تحمل مراجع مشتركة إلى نفس الكائن. يمكن أن تكون مثيلة فئة SmartPtr في أحد حالتين: مؤشر مشترك ومؤشر ضعيف. للحفاظ على بقاء الكائن حيًا، يجب أن يكون عدد المراجع المشتركة إليه إيجابيًا. يمكن استخدام كل من المؤشرات الضعيفة والمشتركة للوصول إلى الكائن المشار إليه (لإستدعاء الأساليب، قراءة أو كتابة الحقول، إلخ)، لكن المؤشرات الضعيفة لا تشارك في عدّ مراجع المؤشر المشترك. يتم حذف Object عندما يتم تدمير آخر مؤشر ‘shared’ من نوع SmartPtr يشير إليه. لذا، تأكد من عدم حدوث ذلك عندما لا توجد مؤشرات SmartPtr مشتركة أخرى للكائن، مثل أثناء إنشاء الكائن أو تدميره. استخدم كائنات الحراسة System::Object::ThisProtector (في كود C++) أو السمة CppCTORSelfReference أو السمة CppSelfReference (في كود C# المترجم) لإصلاح هذه المشكلة. وبالمثل، تأكد من كسر مراجع الحلقة باستخدام فئة المؤشر System::WeakPtr أو وضع المؤشر System::SmartPtrMode::Weak (في كود C++) أو السمة CppWeakPtr (في كود C# المترجم). إذا كان هناك كائنان أو أكثر يشيران إلى بعضهما باستخدام مؤشرات ‘shared’، فلن يتم حذفهما أبدًا. إذا كان يجب تبديل نوع المؤشر (ضعيف أو مشترك) أثناء التشغيل، استخدم طريقة System::SmartPtr::set_Mode() أو فئة System::DynamicWeakPtr. لا تحتوي فئة SmartPtr على أي أساليب افتراضية. يجب أن تورثها فقط إذا كنت تنشئ استراتيجية إدارة ذاكرة خاصة بك. هذا النوع هو مؤشر لإدارة حذف كائن آخر. يجب تخصيصه على المكدس وتمريره إلى الدوال إما بالقيمة أو بالمرجع الثابت.

template<class T>class SmartPtr
Parameterالوصف
Tنوع الكائن المشار إليه. يجب أن يكون إما System::Object أو فئة فرعية منه.

الطرق

طريقةالوصف
begin()الوصول إلى طريقة begin() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة begin().
begin() constالوصول إلى طريقة begin() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة begin().
Cast() constيحوّل المؤشر إلى نوعه نفسه.
Cast() constيحوّل المؤشر إلى النوع الأساسي باستخدام static_cast.
Cast() constيحوّل المؤشر إلى النوع المشتق باستخدام dynamic_cast.
Cast() constيحوّل المؤشر إلى النوع المشتق باستخدام dynamic_cast.
cbegin() constالوصول إلى طريقة cbegin() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة cbegin().
cend() constالوصول إلى طريقة cend() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة cend().
const_pointer_cast() constيحوّل المؤشر إلى نوع مختلف باستخدام const_cast على الكائن المشار إليه.
dynamic_pointer_cast() constيحوّل المؤشر إلى نوع مختلف باستخدام dynamic_cast على الكائن المشار إليه.
end()الوصول إلى طريقة end() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة end().
end() constالوصول إلى طريقة end() لمجموعة أساسية. يتم التجميع فقط إذا كان SmartPtr_ نوعًا متخصصًا يحتوي على طريقة end().
get() constيحصل على الكائن المشار إليه.
get_Mode() constيحصل على وضع المؤشر.
get_shared() constيحصل على الكائن المشار إليه، لكنه يؤكد أن المؤشر في وضع المشاركة.
get_shared_count() constيحصل على عدد المؤشرات المشتركة الموجودة للكيان المشار إليه، بما في ذلك الحالي. يؤكد أن المؤشر الحالي في وضع المشاركة.
GetHashCode() constينفذ GetHashCode() على الكائن المشار إليه.
GetObjectNotNull() constيحصل على الكائن المشار إليه حاليًا (إن وجد) أو يرمي استثناءً.
GetObjectOrNull() constيحصل على الكائن المشار إليه (إن وجد) أو nullptr. نفس ما يفعله get().
GetObjectOwner() constيحصل على الكائن المشار إليه.
GetPointer() constيحصل على الكائن المشار إليه (إن وجد) أو nullptr. نفس ما يفعله get().
Is(const System::TypeInfo&) constيتحقق مما إذا كان الكائن المشار إليه من نوع محدد أو من نوع فرعي له. يتبع دلالات ‘is’ في C#.
IsAliasingPtr() constيتحقق مما إذا كان المؤشر يشير إلى كائن آخر غير المملوك (تم إنشاؤه بواسطة مُنشئ aliasing).
IsShared() constيتحقق مما إذا كان المؤشر في وضع المشاركة.
IsWeak() constيتحقق مما إذا كان المؤشر في وضع الضعف.
explicit operator bool() constيتحقق مما إذا كان المؤشر غير فارغ (ليس null).
operator!() constيتحقق مما إذا كان المؤشر فارغًا (null).
operator*() constيحصل على مرجع للكائن المشار إليه. يؤكد أن المؤشر غير فارغ (ليس null).
operator->() constيسمح بالوصول إلى أعضاء الكائن المشار إليه.
operator<(Y *) constيوفر دلالات مقارنة أقل لـ class SmartPtr.
operator<(SmartPtr<Y> const&) constيوفر دلالات مقارنة أقل لـ class SmartPtr.
operator=(SmartPtr_&&)ينفذ تعيينًا بالنقل لكائن SmartPtr. يصبح x غير قابل للاستخدام.
operator=(const SmartPtr_&)ينفذ تعيينًا بالنسخ لكائن SmartPtr.
operator=(const SmartPtr<Q>&)ينفذ تعيينًا بالنسخ لكائن SmartPtr. يقوم بالتحويلات النوعية المطلوبة.
operator=(Pointee_ *)يعين مؤشرًا خامًا إلى كائن SmartPtr.
operator=(std::nullptr_t)يضبط قيمة المؤشر إلى nullptr.
operator==(std::nullptr_t) constيتحقق مما إذا كان المؤشر يشير إلى nullptr.
operator[](IdxType) constمُدخل للوصول إلى عناصر المصفوفة. يُجمع فقط إذا كان SmartPtr_ تخصصًا لـ System::Array.
RemoveAliasing() constيزيل الـ aliasing (الذي تم إنشاؤه بواسطة مُنشئ aliasing) من المؤشر، ويتأكد من أنه يدير (إذا كان مشتركًا) أو يتتبع (إذا كان ضعيفًا) نفس الكائن الذي يشير إليه.
reset(Pointee_ *)يضبط الكائن المشار إليه.
reset()يجعل المؤشر يشير إلى nullptr.
set_Mode(SmartPtrMode)يضبط وضع المؤشر. قد يغيّر عدد مراجع الكائن المشار إليه.
SetContainedTemplateWeakPtr(uint32_t) constينفّذ طريقة SetTemplateWeakPtr() على الكائن المشار إليه (إن وجد).
SmartPtr(SmartPtrMode)ينشئ كائن SmartPtr بالوضع المطلوب.
SmartPtr(std::nullptr_t, SmartPtrMode)ينشئ كائن SmartPtr ذو مؤشر فارغ بالوضع المطلوب.
SmartPtr(Pointee_ *, SmartPtrMode)ينشئ SmartPtr يشير إلى الكائن المحدد، أو يحوّل المؤشر الخام إلى SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)ينشئ نسخة من كائن SmartPtr. كلا المؤشرين يشيران إلى نفس الكائن بعد ذلك.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)ينشئ نسخة من كائن SmartPtr. كلا المؤشرين يشيران إلى نفس الكائن بعد ذلك. يُجري تحويل النوع إذا كان مسموحًا.
SmartPtr(SmartPtr_&&, SmartPtrMode)ينشئ كائن SmartPtr بنقل. فعليًا، يبدّل المؤشرين إذا كانا في نفس الوضع. قد يصبح x غير قابل للاستخدام بعد الاستدعاء.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)يحوّل نوع المصفوفة المشار إليها بإنشاء مصفوفة جديدة من نوع مختلف. يكون مفيدًا إذا كان هناك تحويل نوع مصفوفة في C# غير مدعوم في C++.
explicit SmartPtr(const Y&)يُهيّئ مصفوفة فارغة. يُستخدم لترجمة بعض بنى كود C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)ينشئ SmartPtr يشارك معلومات الملكية مع القيمة الأولية للمتغير ptr، لكنه يحمل مؤشرًا غير مرتبط وغير مُدار p.
static_pointer_cast() constيحوّل المؤشر إلى نوع مختلف باستخدام static_cast على الكائن المشار إليه.
ToObjectPtr() constيحوّل أي نوع من المؤشرات إلى مؤشر إلى Object. لا يتطلب أن يكون نوع Pointee_ مكتملًا.
static Type()اختصار للحصول على كائن System::TypeInfo لنوع Pointee_ .
~SmartPtr()يدمر كائن SmartPtr. إذا لزم الأمر، يقلل عداد مراجع الكائن المشار إليه ويحذف الكائن.

Typedefs

تعريف نوعالوصف
ArrayTypeنفس Pointee_، إذا كان تخصصًا من System::Array، وإلا يكون void.
Pointee_نوع المؤشر إليه.
SmartPtr_نوع مؤشر ذكي متخصص.
ValueTypeنوع التخزين للمصفوفة المشار إليها. يكون ذا معنى فقط إذا كان T تخصصًا من System::Array.

انظر أيضًا