آموزش پاسکال شی‌گرا

Destructor ها در پاسکال شی‌گرا

Destructor ها در پاسکال شی‌گرا

به متد ویژه ای که قبل از تخریب شی به صورت خودکار فراخوانی میشود Destructor  میگویند
در حقیقت عملکرد Destructor  عکس عملکرد Constructor است .
معمولا از ان برای آزاد کردن حافظه تخصیص یافته به کلاس یا انجام هر نوع عملیات پاکسازی استفاده میشود
یک کلاس نیازی به داشتن Destructor ندارند
به این دلیل که میتواند از Destructor مربوط به جد اصلی کلاس ها ( یعنی TObject ) استفاده کند
توجه داشته باشید که Destructor نیز همانند Constructor نمی تواند شامل مقدار بازگشتی باشد

یک کلاس میتواند شامل چندین Destructor باشد امل معمولا این چنین نخواهد بود
در صورتی که یک کلاس فقط شامل یک Destructor باید آن را با Destroy نام گذاری کند
حتما میپرسید چرا ؟ برای این که وقتی شما نمونه ای از یک کلاس را آزاد میکنید
( یعنی آن را از حافظه حذف میکنید )
از متد Free یکی از متدهای TObject است و قبل از تخریب شی متد Destroy فراخوانی میکند
توجه داشته باشید که این معمولا ترین روش آزاد کردن حافظه مربوط به اشیا است

برای مثال  به کد زیر توجه کنید

Rect1 : = TMyRect.Create;

{کارهایی را انجام داده و در نهایت حافظه را آزاد میکند}

Rect1.Free;

حال کد مربوط به کلاس TMyRect را تغییر می دهیم

TMyRect = class
private
 Left : Integer;
 Top  : Integer;
 Right : Integer;
 Bottom : Integer;
public
 function GetWidth : Integer;
 function GetHeight : Integer;
 procedure SetRect(ALeft, Atop, ARight, ABottom : Integer);
 constructor Create;
 constructor CreateVal(ALeft, Atop, ARight, ABottom : Integer);

 destructor Destroy;override;
end;

constructor TMyRect.Creat;
begin
 inherited Create;

{تخصیص حافظه برای رشته مختوم به تهی}

Text : = AllocMem(1024);
end;

destructor TMyRect.Destroy;
bigen
{آزاد نمودن حافظه تخصیص یافته}

 FreeMem(Text);
 inheried Destroy;
end;

همان طور که مشاهده میکنید
نسخه جدید کلاس TMyRect درون Constructor خود اقدام به تخصیص حافظه
برای یک رشته مختوم به تهی با نام Text کرده است
و سپس درون Destructor اقدام به آزاد کردن حافظه Text نموده است

بهتر است نگاهی عمیق‌تر به تعریف Destructor مربوط به کلاس قبلی داشته باشیم

نکـــــته
معمولا عبارت مربوط به inherited  اولین عبارت درون
Constructor و آخرین عبارت درون Destructor خواهد بود
[adinserter block="1"]
4.7/5 - (3 امتیاز)

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا