استخدام لغة C ++ unique_ptr

Use C Unique_ptr



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

المكونات الرئيسية:







يتم توفير عنصرين رئيسيين للكائن unique_ptr أدناه:



أ. مؤشر مخزّن:



يتم استخدامه لإدارة الكائنات التي تم إنشاؤها بواسطة مؤشر فريد. تم إنشاؤه في وقت إنشاء المؤشر ، ويمكن تغييره بطرق مختلفة.





ب. أداة الحذف المخزنة:

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



مثال 1: إنشاء كائن مؤشر لفئة مع المُنشئ

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

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

#يشمل

#يشمل

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

//حدد الفصل
إضافة فئة{

int number1 ، number2 ، number3 ؛
عام:
//نعلن عن المنشئ
إضافة(int a ، int b ، int c)
{
number1 = أ ؛
number2 = ب ؛
number3 = ج ؛
}
//تعلن طريقة لحسابمجموع
نتيجة كثافة العمليات()
{
إرجاعnumber1 + number2 + number3 ؛
}
}؛
انت مين()
{
//قم بتعريف المؤشر الأول
مؤشر الفريد 1(اضافه جديدة(أربعة خمسةو55و30))؛

كلفة<<'نتيجة المجموع باستخدام المؤشر الأول:'<نتيجة() <<'ن'؛
//قم بتعريف المؤشر الثاني
مؤشر_بتر فريد 2 ؛
//حرك المؤشر الأول إلى المؤشر الثاني
pointer2 = تحرك(المؤشر 1)؛

كلفة<<'نتيجة المجموع باستخدام المؤشر الثاني:'<نتيجة() <<'ن'؛
عودة 0؛
}

انتاج:

سيظهر الإخراج التالي بعد تنفيذ الكود أعلاه. مجموع 45 و 55 و 30 هو 130 تمت طباعته لكلا المؤشرين.

مثال 2: قم بإنشاء كائن مؤشر لفئة باستخدام المُنشئ والمُدمِر

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

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

#يشمل

#يشمل

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

//حدد الفصل
فئة العملاء
{
اسم السلسلة

عام:
//نعلن عن المنشئ
عميل(سلسلة)
{
الاسم = ن ؛
كلفة<<تم تخصيص المورد.ن'؛
}

//طريقة التصريح لطباعة اسم العميل
عرض باطل()
{
كلفة<<'اسم العميل هو:'<<اسم<<'ن'؛
}

//أعلن المدمر
~ الزبون()
{
كلفة<<تم تدمير المورد.ن'؛
}
}؛
انت مين()
{
//قم بتخصيص كائن المورد المملوك من قبل unique_ptr
فريد_بتروالمؤشر{عميل جديد('Mir Abbas') }؛
uPointer->عرض()؛
عودة 0؛
}

انتاج:

سيظهر الناتج التالي بعد تنفيذ الكود أعلاه:

مثال 3: تحقق من المؤشر بعد نقل الملكية

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

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

#يشمل

#يشمل

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

//حدد الفصل
كتاب الصف{

عنوان السلسلة =لغة البرمجة C ++؛
مؤلف السلسلة ='بيارن ستروستروب'؛

عام:
//أعلن عن طريقة لطباعة تفاصيل الكتاب
تفاصيل_الكتب()
{
كلفة<<'اسم الكتاب: '<<لقب<<'ن'؛
كلفة<<'اسم المؤلف: '<<مؤلف<<'ن'؛
}
}؛
انت مين()
{
//قم بتعريف المؤشر الأول
مؤشر الفريد 1(كتاب جديد())؛

المؤشر 1>تفاصيل_الكتب()؛
//قم بتعريف المؤشر الثاني
مؤشر_بتر فريد 2 ؛
//حرك المؤشر الأول إلى المؤشر الثاني
pointer2 = تحرك(المؤشر 1)؛

//تحقق من المؤشر الأول
لو (بث ثابت(المؤشر 1))كلفة<<المؤشر الأول ليس فارغًان'؛
إلكوت<<'المؤشر الأول لاغٍن'؛
//تحقق من المؤشر الثاني
لو (بث ثابت(المؤشر 2))كلفة<<'المؤشر الثاني ليس باطلن'؛
إلكوت<<المؤشر الثاني لاغٍن'؛

عودة 0؛
}

انتاج:

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

استنتاج:

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