اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر (معدل)

ببساطة ال 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، ليقوم بتحرير المواقع المحجوزة.

تم التعديل في بواسطة Ali Haidar Ahmad
  • 1
نشر

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++ المدمر لا يمكن أن يحتوي على معلمات و يتم إستدعاء المدمر تلقائيا عند نهاية البرنامح لتفريخ الذاكرة من المعلومات,

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...