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

[ تمت الإجابة ]داله الهدم (destructor) لا تنفذ في visual c++ 2010 ما الحل؟

بدأه طموحة بلا حدود في 21 فبراير 2013 · 11 رد · 1,754 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كتبت كود في الفيجول سي ++ 2010  يحتوى على كلاس

واريد توضيح داله البناء والهدم  بطباعه عباره داخل الدالتين توضح متى تنفذ داله البناء والهدم

 

لماذا في داله destructor لا تظهر عباره الطباعه الموجوده داخلها في التنفيذ ؟؟

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#2

أين الكود؟

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3

شكرا استاذ محمد على الرد

 

لكن عندما اكتب نفس الكود في برنامجcode blocks يتنفذ الكود وتظهر الرسالتين في الدالتين

 

وهذا هو الكود هو كود بسيط جدا :

 

#include<iostream>
using namespace std;

class test{
public:
    test(){
    cout<<"constructor (t)"<<endl;
    
    }
    ~test(){
    cout<<"destructor (t)";
    }
};


int main(){
    test t;

return 0;
}

تم تعديل هذه المشاركة بواسطة محمد عودة في 23 فبراير 2013 في 21:38

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#4

الهدام ينفذ فعلياً لكن لأنك أنشأتي الكائن في الدالة الرئيسة تُطبع الجملة وتظهر جملة Press any key to continue . . . عند ضغطتها يستدعى الهدام ويخرج البرنامج بسرعة (إذا كنت سريعة الملاحظة سترين الجملة).

 

أنشيئ الكائن في دالة غير الدالة الرئيسية كي يُستدعى الهدام عند الخروج منها مثل:

#include<iostream>
using namespace std;

class test{
public:
    test(){
        cout << "constructor (t)" << endl;

    }
    ~test(){
        cout << "destructor (t)" << endl;
    }
};

void foo(void) {
    test t;
}

int main(){
    foo();
    return 0;
}
1
#5

الكود يعمل بشكل ممتاز على VC++ 2010... لا يظهر الـdestructor بوضوح على كل حال لذلك أضف endl بعده

1

هذه الجملة خاطئة  :wacko: 


#6

او انشئه داخل الدالة الرئيسية لكن داخل scope منفصل:

int main(){    {      test t;    }	  return 0;}

تم تعديل هذه المشاركة بواسطة C++er في 22 فبراير 2013 في 02:04

1

مدونتي: C++ Tips and Tricks

#7

ماذا لو استخدم pause

او cin.get();

 

#include <iostream>
#include <cstdlib>
 
using namespace std;
 
class Test{
public:
    Test(){
        cout << "constructor (t)" << endl;
    }
    ~Test(){
        cout << "destructor (t)" << endl;
    }
};
 
int main(){
    Test t;
    
    system("pause");
    return 0;
}

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 22 فبراير 2013 في 22:04


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#8

شكرا لكم

نفذت الداله بنجاح  وظهرت الرساله في الطريقتين

عند الاعلان عن object داخل داله خارجmain

او عند الاعلان لل object داخل scope منفصل

 

ام عند استخدام pause لا تظهر رساله destructor فقط تظهر press any key to continue ....

 

تسلموا اخواني على الردود   وجزيتم الف خير

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#9

استخدمت Online compiler واعطانى النتيجة

 

http://ideone.com/C7tfvX

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 22 فبراير 2013 في 23:16


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#10

يبدو انى أخطأت باضافة pause or get

 

ففى كل الحالات لن يتم الهدم الا بعد جملة ال return

 

لكن ما حدث معك ليس قياسى فى اللغة وانما فى VStudio لانى جربت نفس الكود على Code::Blocks وطبع الجملتين

 

كذلك لو شغلت البرنامج الناتج من command line مباشرة

 

C:>dest.exe

 

حيث dest.exe هو البرنامج الناتج من ترجمة الكود

 

تحياتى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#11

CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.

2
#12
Khaled.Alshaya كتب:

CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.

 

شكرا لك استاذ خالد :)


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…