الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في ال Copy Constructor و ال Destructors

بدأه ريموو .. في 13 نوفمبر 2009 · 5 رد · 815 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

عندي سؤالين وياليت تجاوبوني عليهم

lWhat happen if one or more of the data members declared as pointers…!!!

في الكوبي كونستركتر يعني

انا اتوقع إنو عادي يصير نسخه من هذه المؤشرات

وما تتأثر باقي الداتا ممبر اللي بالكلاس ولا حتى الفنكشن

lDefault copy constructors work fine unless the class contains pointer data members ... WHY!!!

هنا صارت عندي مشكلة .. غيرت رأي الأول

وقلت راح يطلع RunTime Error

لآن بيصير في مؤشرين بنفس الاسم بيأشرون على نفس المكآن

صح إعتقادي أو لآ ..

وسؤال آخر لو سمحتم ..

متى تتنادى الـ Destructors

هل في نهايه كل فنكشن .. والا في نهاية كل فنكشن فيها اوبجكت

تم تعديل هذه المشاركة بواسطة ريموو .. في 13 نوفمبر 2009 في 17:35

#2

السؤال غير واضح تماماً ربما لو وضعت الجزء من البرنامج الذي عندك توضح الامور .

اما عن انه لا تستخدم ال Default copy constructors مع المؤشرات فسبب ان هذه العمليه تقوم بعمليت نسخ سطحيه للبيانات يعني لو في عمليات ربط بين البيانات او عمليات اكثر تعقيد لن يفيدك ال ال Default copy constructors وعليك ان تبي واحد حتى تسير الامور بشكل المطلوب ,

اما عن اول السؤال اذا فهمته صحيح بأنه "هل من الممكن ان يكون هناك مؤشرين لنفس ال data او object" فجوب هو نعم هذا ممكن ولكن عليك الانتباه انه عند الانتهاء من هذه ال object فأنك تحذف مؤشر واحد فقط!!!! وليس جميع المؤشرات .

واخيراً عن ال destructor فأنت لا تحتاج الى استدعائه فال object يستدعيه مباشره عندما ينتهي سؤاء اكان معرف بال stack memory او heap ,

#3
Ali Al-Zyoud كتب:
السؤال غير واضح تماماً ربما لو وضعت الجزء من البرنامج الذي عندك توضح الامور .

اما عن انه لا تستخدم ال Default copy constructors مع المؤشرات فسبب ان هذه العمليه تقوم بعمليت نسخ سطحيه للبيانات يعني لو في عمليات ربط بين البيانات او عمليات اكثر تعقيد لن يفيدك ال ال Default copy constructors وعليك ان تبي واحد حتى تسير الامور بشكل المطلوب ,

اما عن اول السؤال اذا فهمته صحيح بأنه "هل من الممكن ان يكون هناك مؤشرين لنفس ال data او object" فجوب هو نعم هذا ممكن ولكن عليك الانتباه انه عند الانتهاء من هذه ال object فأنك تحذف مؤشر واحد فقط!!!! وليس جميع المؤشرات .

واخيراً عن ال destructor فأنت لا تحتاج الى استدعائه فال object يستدعيه مباشره عندما ينتهي سؤاء اكان معرف بال stack memory او heap ,

جزاك الله خير بالنسبة للسؤال الاول

إذا كنت بسوي كونستركتر يسوي انشلايز للداتا ممبر ايش يصير لو كانت هذي الداتا ممبر عبارة عن بوينتر ؟؟

وبالنسبة للدستركتر .. إذا كآن لها بدي .. وكان عبارة مثلا ً عن Cout كم مرة تنطبع

كل ماانتهت فنكشن والا كل ماانتهت فنكشن فيها اوبجكت ..

هذا مقصدي

#4

وعليكم السـلآم ورحمه الله وبركاته .. ,

اقتباس
وبالنسبة للدستركتر .. إذا كآن لها بدي .. وكان عبارة مثلا ً عن Cout كم مرة تنطبع

كل ماانتهت فنكشن والا كل ماانتهت فنكشن فيها اوبجكت ..

هذا مقصدي

تستدعى دالة الهدم في نهاية البرنامج وعلى حسب عدد الـ Object,

يعني لو برنامجك فيه two Object بتنطبع الجملة مرتين , بس بالعكس ( يطبع الـobject الأول و بعدين الثاني ) ..

والله أعلم ,

تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 14 نوفمبر 2009 في 00:09

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#5

destructor يستدا اوتوماتيكياً عندما يتم حذف object من الذاكره سواء انت معرفه داخل فنكشن او عامل dynamic object بأستخدام new ثم عملت له delete يستدعى ال destructor .

ويستدعى بحسب عدد ال object حيث كل object له destructor خاص به ,

#6

اشراقه شمس الاخ علي

جزاكم الله كل الخير

شكرا ً جزيلا ً لكم

مواضيع مشابهة