PDA

View Full Version : چرا اشیاء ساخته شده را Free می کنیم؟



elena
پنج شنبه 06 اسفند 1388, 12:06 عصر
چرا وقتي نمونه اي از كلاس رو ايجاد مي كنيم تا بتونيم از اون كلاس استفاده كنيم در پايان با

دستورfree اون رو ازبين مي بريم.:لبخندساده::قلب:

Felony
پنج شنبه 06 اسفند 1388, 12:42 عصر
برای اینکه فظای اختصاص یافته به اون شئ پس از پایان کار آزاد بشه ، اگر این کار رو نکینم مقدار حافظه ای که به شئ مشتق شده از کلاس تخصیص داده شده آزاد نشده و حافظه بی دلیل مصرف میشه و در آخر با سرریز حافظه مواجه میشیم .

دقت کنید که در پروژه ها کوچک شاید برنامه بدون مشکل کار کنه و با خطا و ... مواجه نشیم اما در پروژه ها بزرگ مشکلات ناشی از سرریز حافظه و نشت حافظه و ... میتونه زمینه ای برای کله پا شدن برنامه باشه !

BORHAN TEC
شنبه 08 اسفند 1388, 11:51 صبح
برای اینکه فظای اختصاص یافته به اون شئ پس از پایان کار آزاد بشه ، اگر این کار رو نکینم مقدار حافظه ای که به شئ مشتق شده از کلاس تخصیص داده شده آزاد نشده و حافظه بی دلیل مصرف میشه و در آخر با سرریز حافظه مواجه میشیم .
البته اشياي از جنس VCL در هنگام بسته شدن برنامه به طور خودكار، فضايشان آزاد سازي مي شود.
به اين نكته هم توجه كنيد كه براي اين كار مي توانيد از متد Destroy هم استفاده كنيد.

منبع: كتاب آقاي كنت ريز دورف

Felony
شنبه 08 اسفند 1388, 11:56 صبح
البته اشياي از جنس VCL در هنگام بسته شدن برنامه به طور خودكار، فضايشان آزاد سازي مي شود.
فکر میکنم از متن سوالشون معلوم هست که این مطلب رو میدونن .

چرا وقتي نمونه اي از كلاس رو ايجاد مي كنيم تا بتونيم از اون كلاس استفاده كنيم در پايان با
دستورfree اون رو ازبين مي بريم.

vcldeveloper
یک شنبه 09 اسفند 1388, 01:42 صبح
البته اشياي از جنس VCL در هنگام بسته شدن برنامه به طور خودكار، فضايشان آزاد سازي مي شود.
همه اشیاء برنامه زمانی که Process بسته بشه، آزاد میشند. ربطی به VCL نداره.

اون چیزی که در اون کتاب مطرح شده احتمالا مربوط به وجود خصوصیت Owner در کامپوننت های دلفی بوده. کامپوننت های دلفی از کلاس TComponent مشتق میشند، و یک خصوصیت Owner دارند. Owner یک کامپوننت به طور خودکار آن کامپوننت را آزاد میکنه، و نیازی نیست برنامه نویس مستقلا آن شی را آزاد کنه.


به اين نكته هم توجه كنيد كه براي اين كار مي توانيد از متد Destroy هم استفاده كنيد.
از Destroy نباید هیچ وقت برای آزاد کردن یک شی استفاده کنید. برای این منظور باید از Free استفاده کنید. متد Destroy به طور خودکار اجرا میشه، و نباید به طور مستقل توسط برنامه نویس فراخوانی بشه.

امید امرایی
یک شنبه 09 اسفند 1388, 10:21 صبح
از Destroy نباید هیچ وقت برای آزاد کردن یک شی استفاده کنید. برای این منظور باید از Free استفاده کنید. متد Destroy به طور خودکار اجرا میشه، و نباید به طور مستقل توسط برنامه نویس فراخوانی بشه.

درسته
البته تنها تفاوت Free با Destroy در اینه که این تابع ابتدا چک می کنه که شی قبلا آزاد نشده باشه