بالإضافة إلى المُنشئ الذي يتم استدعاؤه تلقائيًا عند إنشاء كائن فئة كما هو مذكور في القسم السابق، يتم أيضًا استدعاء الوظيفة تلقائيًا عند تدمير الكائن، كما أن لها نفس اسم اسم الفئة وليس لها قيمة إرجاع. توجد علامة تيلدا ~ أمام الاسم Use لتمييز المُنشئ، تُستخدم وظيفته بشكل أساسي لتنظيف الآثار بعد تحرير الكائن. إنه المدمر .
مثل المنشئ واسم الفئة، لا توجد قيمة إرجاع إذا لم يحددها المستخدم، فسيقوم النظام تلقائيًا بإنشاء أداة تدمير فارغة. بمجرد تعريفه من قبل المستخدم، يتم استدعاؤه تلقائيًا عند تدمير الكائن.
على عكس المنشئين، على الرغم من أن كلا النوعين من الأنواع العامة. يمكن تحميل البناء بشكل زائد وله عدة إخوة، ولكن لا يمكن تحميل المدمر بشكل زائد، ولكن يمكن أن يكون وظيفة افتراضية، ويمكن أن يحتوي الفصل على مدمر واحد فقط.
بعد ذلك، نأخذ فئة الطالب كمثال ونستمر في إضافة المدمر. وفي الوقت نفسه، نضيف معلومات حول الفصل الحالي في كل من المنشئ والمدمر لتحديد الفصل الذي تم إنشاؤه وتدميره. يرجى قراءة الكود بعناية :
#include<iostream>#include<Cstring>usingnamespacestd;classStudent{private:intnum;//رقم الطالب charname[100];//name intscore;//score public:Student(intn,char*str,ints);~Student ();intprint();intSet(intn,char*str,ints);};Student::Student(intn,char*str,ints){num=n;strcpy(name,str);score=s;cout <<num<<<<name<<<<score<<;cout<<Constructor<<endl;}Student::~Student(){cout<<num<<<<name<<<<score<<; cout<<destructor<<endl;}intStudent::print(){cout<<num<<<<name<<<<score<<endl;return0;}intStudent::Set(intn,char*str,ints) {num=n;strcpy(name,str);score=s;}intmain(){StudentA(100,dot,11);StudentB(101,cpp,12);return0;}
يرجى فهم المنشئ والمدمر بعناية في الكود أعلاه، ولاحظ أنه تم تعريف الكائنين A وB في الوظيفة الرئيسية، واختبارهما على جهاز الكمبيوتر الخاص بك، يمكنك أن ترى أن تأثير التشغيل هو كما يلي:
يمكنك أن ترى أن ترتيب استدعاء المنشئين وترتيب استدعاء المدمرين للكائنين A وB عكس ذلك تمامًا! والسبب هو أن الكائنين A وB كلاهما كائنات محلية ويتم تخزينهما أيضًا في منطقة المكدس، كما أنهما يتبعان ترتيب "الوارد أولاً وآخرًا يخرج"!
يرجى التأكد من اختبار النتائج والتحقق منها شخصيًا!