الفرق بين المنشئ والمدمر

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 4 قد 2024
Anonim
Difference Between Smoke and Sanity Testing
فيديو: Difference Between Smoke and Sanity Testing

المحتوى


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

في بعض الأحيان يكون مطلوبًا تهيئة جزء من كائن قبل استخدامه. على سبيل المثال ، نحن نعمل على المكدس ، وقبل تنفيذ أي إجراء ، يجب دائمًا تعيين الجزء العلوي من المكدس على صفر. يتم تنفيذ ميزة التهيئة التلقائية هذه من خلال "Constructor". مثل ، إذا كان الكائن يحتاج إلى تنفيذ بعض التعليمات البرمجية قبل إتلافه. على سبيل المثال ، إذا كان الكائن يحتاج إلى إغلاق ملف فتحه ، قبل تدميره. يمكن تنفيذه بمساعدة 'Destructor'.

دعنا نلقي نظرة عامة على بعض الاختلافات الأساسية بين المنشئ والمدمر بمساعدة مخطط المقارنة

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. خاتمة

رسم بياني للمقارنة:

أساس للمقارنةالبناءالمدمر
هدف

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

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


تعريف المنشئ:

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

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

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

أنواع البنائين

يوجد بشكل أساسي ثلاثة أنواع من المُنشآت ، هي: مُنشئون افتراضيون ومُعلَّمون ونسخ.

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

تنفيذ المنشئ:

الطبقة CON {int a، b؛ public: Const () // constructor بدون معامل {a = 0؛ ب = 0؛ } Const (int c، int d) {// مُنشئ مع المعلمة a = c؛ ج = د. }} ؛ int main () {Const C1؛ C2 (10،20)؛ // هذا البيان يستدعي المنشئ}

عند إنشاء C1 ، يتم تنفيذ مُنشئ بدون أي معلمة ، حيث لا يتم تمرير C1 لأي ​​معلمة. بينما ، عندما يتم إنشاء C2 ، يتم تنفيذ مُنشئ ذو معلمة ، لأنه يمرر عددين صحيحين إلى المُنشئ.


تعريف المدمر:

أ المدمر هي أيضًا وظيفة عضو لفئة ، والتي تقوم بإلغاء تخصيص الذاكرة المخصصة لكائن ما. يتم تعريفه بنفس الاسم مثل الفئة ، مسبوقًا بـ a تيلدا (~) رمز. يتم استدعاء المدمرات دائمًا بالترتيب العكسي للمنشئات.

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

تنفيذ المدمرة:

الطبقة CON {int a، b؛ العامة: Const (int c، int d) // مُنشئ مع المعلمة. {a = c؛ ج = د. cout << "قيمة a و b هي" <<>

عندما يتم إنشاء كائن C1 ، يتم استدعاء مُنشئ ذو معلمتين من النوع الصحيح ويتم تهيئة العضو "a ، b" ويتم تحرير قيمة "a ، b". بعد ذلك يتم استدعاء المدمر و "تدمير الكائن C1".

حاجة المدمر

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

  1. الغرض الأساسي من المُنشئ هو تخصيص الذاكرة للكائنات عند إنشائها. على عكس ذلك ، فإن الغرض الرئيسي من المدمر هو إلغاء تخصيص ذاكرة الكائن عند تدميره.
  2. يُسمح للمنشئ بقبول الوسائط حيث يمكن استخدام الوسائط لتهيئة أعضاء البيانات للفئة. من ناحية أخرى ، لا يقبل المدمر أي وسيطات لأن عمله الوحيد هو إلغاء تخصيص ذاكرة الكائن.
  3. يتم استدعاء المنشئ عند إنشاء كائن. في المقابل ، يتم استدعاء destructor عند إنهاء البرنامج أو خروج البرنامج من الكتلة التي يتم إنشاء كائن فيها.
  4. يستخدم المنشئ بشكل عام لتهيئة أعضاء البيانات للفئة ، في حين يتم استخدام المدمر للسماح للكائن بإجراء بعض الإجراءات قبل إتلافه.
  5. يتم تنفيذ المنشئات بالترتيب المتتالي وهذا يعني إذا كان هناك فئة مشتقة ترث الفئة الأساسية ويتم إنشاء كائن الفئة المشتقة ، ثم ستقوم باستدعاء مُنشئ الفئة الأساسية أولاً ثم مُنشئ الفئة المشتقة. على العكس من ذلك ، يسمى المدمر للفئة المشتقة أولاً ثم الطبقة الأساسية ، وهذا يعني أن المدمر يتم تنفيذه بترتيب عكسي للمنشئ.
  6. في الفصل ، يمكن أن يكون هناك عدة مُنشئات يتم تحديدها بواسطة وسيطات الأرقام التي تم تمريرها بينما يمكن أن تحتوي على مُدمّر واحد فقط.
  7. هناك مفهوم منشئ النسخ الذي يسمح لكائن ما بتهيئة من كائن آخر بينما المدمر ليس لديه مثل هذا المفهوم.
  8. يمكن أن يكون الزائدون أكثر من اللازم لأداء عمل مختلف تحت اسم المنشئ نفسه. على العكس من ذلك ، المدمرات لا يمكن أن تكون مثقلة.

خاتمة:

إلى جانب التشابه ، فإن المُنشئ والمدمِّر هما العضوان العضوان الخاصان في الفصل ويمتلكان نفس الاسم ، والفرق الأساسي بينهما هو أن "المُنشئ" يُدعى وقت تخصيص الذاكرة ويُدعى "المُدمِّر" في وقت الكائنات إلغاء تخصيص الذاكرة. يتم استدعاء كل من المُنشئ و destructor ضمنيًا بواسطة مترجم على الرغم من عدم تعريفهما في الفصل.