C ++ shared_ptr

C Shared_ptr



ال Shared_ptr هو أحد أنواع المؤشرات الذكية لـ C ++ الذي يحتوي على الملكية المشتركة للكائن الذي تم إنشاؤه بواسطة المؤشر. يشترك في ملكية الكائن عند تخزين المؤشر في كائن آخر ، ويقوم العداد المرجعي المشترك بحساب عدد المالكين. ال Shared_ptr يزيد العداد المرجعي بواحد بعد نسخ الكائن ويقلل العداد المرجعي بواحد بعد تدمير الكائن. يتم إعادة تخصيص الذاكرة التي يمتلكها الكائن إذا كان الكائن مملوكًا للآخر Shared_ptr تم تدميره ، أو إعادة تعيين() يتم استدعاء الوظيفة لتعيين مؤشر آخر للكائن. عندما Shared_ptr لا يمتلك أي كائن ، ثم يطلق عليه مؤشر مشترك فارغ. الاستخدامات المختلفة لـ Shared_ptr تم عرضها في هذا البرنامج التعليمي.

مثال 1: قم بتعريف المؤشر المشترك بطرق مختلفة

يتم عرض ثلاث طرق مختلفة للإعلان عن مؤشر مشترك في المثال التالي. تم الإعلان عن فئة مع منشئ وطريقة عامة في الكود. سيقوم المُنشئ بطباعة رسالة عند إنشاء كائن مشترك جديد باستخدام المُنشئ. ال عرض() ستتم طباعة الرسائل بناءً على استدعاء كائن المؤشر المشترك. هنا ، تم إنشاء أول كائن مؤشر مشترك دون استدعاء المنشئ. تم إنشاء كائن المؤشر المشترك الثاني عن طريق استدعاء المُنشئ. تم إنشاء المؤشر المشترك الثالث عن طريق تعيين أول مؤشر مشترك. ال عرض() تم استدعاء الأسلوب ثلاث مرات باستخدام ثلاثة كائنات مؤشر مشتركة.







// تضمين المكتبات الضرورية

#يشمل

#يشمل

استخدام اسم للمحطة؛

// تحديد الفئة
classMyClass{
عام:
// أعلن المنشئ
صفي() {
كلفة<<'المنشئ يسمى.ن'؛
}
// أعلن عن طريقة لطباعة النص
عرض باطل(سلسلة سلسلة)
{
كلفة<<يتم استدعاء طريقة العرض () من '<<ص<<المؤشر.ن'؛
}
}؛

انت مين()
{
// تهيئة shared_ptr بدون استدعاء المُنشئ
Shared_ptr p1=Make_shared()؛
ص 1->عرض('أول')؛
// تهيئة shared_ptr عن طريق استدعاء المُنشئ
Shared_ptr p2=Shared_ptr(جديد MyClass)؛
ص 2->عرض('ثانيا')؛

// تهيئة shared_ptr عن طريق التعيين
Shared_ptr p3=ص 1؛
ص 3->عرض('الثالث')؛
العودة 0؛
}

انتاج:



سيظهر الإخراج التالي بعد تنفيذ الكود أعلاه. استدعى المنشئ وقت إنشاء الكائن الثاني فقط. لذلك ، تمت طباعة رسالة المنشئ مرة واحدة فقط:







مثال 2: طباعة موقع المؤشر المشترك المخزن

يتم استخدام المؤشر المشترك للدالة get () لإرجاع موقع المؤشر المشترك المخزن. سيطبع المثال التالي موقع المؤشرات المشتركة المخزنة التي تم إنشاؤها بواسطة الفئة والوظيفة. هنا ، تم تعريف فئة ذات مُنشئ لاستخدامها في إنشاء مؤشر مشترك. تم الإعلان عن وظيفة لإنشاء مؤشر مشترك وطباعة موقع المؤشر المشترك باستخدام وظيفة get (). في هذا الرمز ، تم إنشاء المؤشر المشترك الأول باستخدام الفئة ، وتم إنشاء المؤشر المشترك الثاني باستخدام الوظيفة ، وتم إنشاء المؤشر المشترك الثالث عن طريق تعيين المؤشر الأول.

// تضمين المكتبات الضرورية

#يشمل

#يشمل

استخدام اسم للمحطة؛

// تحديد الفئة
classMyClass
{
عام:
// أعلن المنشئ
صفي() {
كلفة<<'المنشئ يسمى.ن'؛
}
}؛
// تحديد وظيفة لتهيئة المؤشر
voidInit_shared_ptr()
{
Shared_ptr p2(جديد MyClass)؛
كلفة<<ص 2.احصل على() <<'ن'؛
}

انت مين()
{
// تهيئة shared_ptr عن طريق استدعاء المُنشئ
Shared_ptr p1=Shared_ptr(جديد MyClass)؛
كلفة<<ص 1.احصل على() <<'ن'؛

// تهيئة shared_ptr عن طريق استدعاء الوظيفة
Init_shared_ptr()؛

// تهيئة shared_ptr عن طريق التعيين
Shared_ptr p3=ص 1؛
كلفة<<ص 3.احصل على() <<'ن'؛
العودة 0؛
}

انتاج:



سيظهر الإخراج المماثل التالي بعد تنفيذ الكود أعلاه. في الإخراج ، القيمة المرجعة لوظيفة get () للمؤشر المشترك الأول والثالث هي نفسها. ومع ذلك ، فإن المؤشر المشترك الثاني مختلف:

مثال 3: عد كائنات المؤشر المشتركة

يوضح المثال التالي طريقة لحساب عدد الكائنات المشار إليها بمؤشر مشترك بعد إنشاء المؤشر وإتلافه. تم التصريح عن فئة مع منشئ في الكود. تم إنشاء المؤشر المشترك الأول باستخدام الفئة ، وتم إنشاء المؤشر المشترك الثاني باستخدام المؤشر المشترك الأول. تمت طباعة عدد الكائنات المشار إليها بواسطة كل من المؤشرات المشتركة قبل وبعد استدعاء وظيفة إعادة التعيين () لاحقًا.

// تضمين المكتبات الضرورية

#يشمل

#يشمل

استخدام اسم للمحطة؛
// تحديد الفئة
classMyClass{
عام:
// أعلن المنشئ
صفي() {
كلفة<<'المنشئ يسمى.ن'؛
}
}؛
انت مين()
{
// تهيئة أول Shared_ptr عن طريق استدعاء المُنشئ
Shared_ptr p1(جديد MyClass)؛

// عرض عدد الكائنات shared_ptr بواسطة المؤشر الأول
كلفة<<'p1 يشير إلى'<<ص 1.use_count() <<' شاء).ن'؛
// تهيئة the shared_ptr الثاني باستخدام أول shared_ptr
Shared_ptr p2(ص 1)؛
// عرض عدد الكائنات shared_ptr بالمؤشر الأول والثاني
كلفة<<'p2 يشير إلى'<<ص 2.use_count() <<' شاء).ن'؛
كلفة<<'p1 يشير إلى'<<ص 1.use_count() <<' شاء).ن'؛
// إزالة ملكية المؤشر الأول من الكائن shared_ptr
ص 1.إعادة تعيين()؛
// عرض عدد الكائنات shared_ptr بالمؤشر الثاني
كلفة<<'p2 يشير إلى'<<ص 2.use_count() <<' شاء).ن'؛
العودة 0؛
}

انتاج:

سيظهر الإخراج التالي بعد تنفيذ الكود أعلاه. المؤشر الأول ، ص 1 ، يشير إلى كائن واحد بعد الخلق. بعد إنشاء المؤشر الثاني ، ص 2 باستخدام المؤشر الأول ، ص 1 ، يشير كلا المؤشرين إلى كائنين لمشاركة المؤشر. بعد استدعاء وظيفة إعادة التعيين () للمؤشر ، ص 1 ، تم تدمير كائن واحد ، والمؤشر ، ص 2 ، يشير الآن إلى كائن واحد فقط.

استنتاج:

تم شرح أغراض استخدام مؤشر مشترك في C ++ في هذا البرنامج التعليمي باستخدام أمثلة بسيطة. إنشاء مؤشرات مشتركة بطرق مختلفة ، وتخزين موقع المؤشر المشترك ، وإحصاء عدد الكائنات المشار إليها بواسطة المؤشرات المشتركة. آمل أن يتمكن مبرمجو C ++ من استخدام المؤشر المشترك في التعليمات البرمجية الخاصة بهم بعد قراءة هذا البرنامج التعليمي.