موصى به, 2024

اختيار المحرر

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

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

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

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

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

تعريف منشئ:

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

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

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

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

 class Const {int a، b؛ public: Const () {/ / constructor with no parameter a = 0؛ ب = 0؛ } Const (int c، int d) {/ / constructor with parameter a = c؛ ج = د. }}؛ int main () {Const C1؛ C2 (10،20)؛ // this statement invokes constructor} 

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

تعريف Destructor:

Destructor هو أيضاً دالة عضو لفئة ، والتي تقوم بتعطيل الذاكرة المخصصة لأحد الكائنات. يتم تعريفه بنفس الاسم مثل اسم الفئة ، مسبوقًا برمز التلدة (~). دائما ما يطلق على التدمير في ترتيب عكس المنشئات.

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

تنفيذ Destructor:

 class Const {int a، b؛ public: Const (int c، int d) {/ / constructor with parameter. و= ج. ج = د. cout << "قيمة a و b" < 

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

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

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

استنتاج:

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

Top