Ziena Darffat نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 أرجو المساعةدة في فهم destructor في C++ اقتباس
1 Ali Haidar Ahmad نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 (معدل) ببساطة ال destructor عبارة عن تابع لا يرد أية قيمة ولا يحوي على return ولا نمرر له أي وسيط. يتم تعريفه بأن نكتب ( اسم الصف مسبوق بالإشارة ~ ) ثم فتح قوسين فارغين، و من الممكن أن يحوي تعليمات أو أن لا يحوي. مثال : Class A{ Public : // تعريف باني افتراضي A() { cout<<"A"; } // destructor ~ A() { cout<<" Destructor is call " ; } } لكل صف يتم إنشاؤه يكون هناك destructor افتراضي (يتم تعريفه تلقائياً حتى ولو لم تقم بالتصريح عنه واستدعائه ). مثلاً في حال تم انشاء كائن ضمن دالة وتم تنفيذ محتوى هذه الدالة سيتم استدعاء التابع destructor (وببساطة سيتم حذف أي شيء تم تعريفه ضمن الدالة بعد أن تنفذ). يتم الاستفادة من التابع destructor عندما يكون ضمن الصف حقول معطيات ديناميكية مثل (مؤشرات ، مصفوفات ديناميكية ..إلخ) حيث أننا ضمن جسم التابع نقوم بتحرير المواقع المحجوزة من قبل هذه المتحولات الديناميكية عن طريق استخدام التعليمة delete. مثال : ليكن لدينا الصف dynamic يحتوي على المصفوفة الديناميكية A ،من النمط int و باني افتراضي للتهيئة بالصفر وطريقة لإدخال عناصر المصفوفة و هادم ( destructor). عندئذ يجب استخدام التعليمة delete في الهادم لتحرير المواقع المحجوزة من قبل المصفوفة الديناميكية. #include <iostream> using namespace std; class dynamic { private : int *A ; int size ; public : // البان الافتراضي dynamic (){ cout<<" constructor is called " ; size = 0; A=new int [0]; } //طريقة لادخال عناصر المصوفة void input(s){ size = s; A=new int [size]; for (int i=0;i<size;i++){ cin>>A[i]; } //هادم لتحرير الذاكرة ~dnamic() { Cout<< " destructor is called " ; Delete[]A; } }; int main() { dynamic d //غرض من الصف السابق int n; cin>>n ; //ادخال عدد العناصر d.input(n); return 0 ; } //الخرج constructor is called 5 1 2 55 57 69 destructor is called إذاً تم استدعاء التابع Destructor بعد الانتهاء من تنفيذ جميع تعليمات البرنامج الموضوعة ضمن ال main، ليقوم بتحرير المواقع المحجوزة. تم التعديل في 7 يوليو 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
1 محمد أيت لعرايك نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 Destructor هي وظيفة يتم استدعاؤها تلقائيًا عندما يتم مسح كائن ما من الذاكرة. يعني أن أداة المسح من الذاكرة هي الوظيفة الأخيرة التي سيتم استدعاؤها قبل مسح الكائن. يمكن تعريفه مرة واحدة فقط في class. مثل المنشئات ، يتم استدعاؤها تلقائيًا. يتم تعريف Destructor مثل المنشئ. يجب أن يكون له نفس اسم class. لكنها مسبوقة بعلامة التلدة (~). مثال: #include <iostream> using namespace std; class Employee { public: Employee() // دالة المنشئ { cout<<"تم إنشاء كائن موظف"<<endl; } ~Employee() // دالة المدمر { cout<<"تم تدمير كائن الموظف"<<endl; } }; int main(void) { Employee e1; //بناء كائن الموظف return 0; } /** النتيجة : تم إنشاء كائن موظف تم تدمير كائن الموظف */ في C++ المدمر لا يمكن أن يحتوي على معلمات و يتم إستدعاء المدمر تلقائيا عند نهاية البرنامح لتفريخ الذاكرة من المعلومات, اقتباس
السؤال
Ziena Darffat
أرجو المساعةدة في فهم destructor في C++
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.