فئة 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
معاملالوصف
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يتحقق مما إذا كان المؤشر يشير إلى كائن آخر غير المملوك (تم إنشاؤه بواسطة مُنشئ التسمية المستعارة).
IsShared() constيتحقق مما إذا كان المؤشر في وضع المشاركة.
IsWeak() constيتحقق مما إذا كان المؤشر في وضع الضعف.
explicit operator bool() constيتحقق مما إذا كان المؤشر غير فارغ.
operator!() constيتحقق مما إذا كان المؤشر فارغًا.
operator*() constيحصل على مرجع للكائن المشار إليه. يؤكد أن المؤشر غير فارغ.
operator->() constيسمح بالوصول إلى أعضاء الكائن المشار إليه.
operator<(Y *) constيوفر دلالات مقارنة أقل لفئة SmartPtr.
operator<(SmartPtr<Y> const&) constيوفر دلالات مقارنة أقل لفئة 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يزيل التسمية المستعارة (التي تم إنشاؤها بواسطة مُنشئ التسمية المستعارة) من المؤشر، ويتأكد من أنه يدير (إذا كان مشاركة) أو يتتبع (إذا كان ضعيف) نفس الكائن الذي يشير إليه.
reset(Pointee_ *)يضبط الكائن المشار إليه.
reset()يجعل المؤشر يشير إلى nullptr.
set_Mode(SmartPtrMode)يضبط وضع المؤشر. قد يغيّر عدّات المراجع للكائن المشار إليه.
SetContainedTemplateWeakPtr(uint32_t) constينادي طريقة SetTemplateWeakPtr() على الكائن المشار إليه (إن وجد).
SmartPtr(SmartPtrMode)ينشئ كائن SmartPtr بالوضع المطلوب.
SmartPtr(std::nullptr_t, SmartPtrMode)ينشئ كائن SmartPtr فارغ (null-pointer) بالوضع المطلوب.
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.

انظر أيضًا