از destructor چه جاهایی و چطور استفاده کنیم بهتره ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

از destructor چه جاهایی و چطور استفاده کنیم بهتره ؟

+2 امتیاز
سلام

دوستان عزیزم در هفت خط کد خسته نباشید.

از مخرب کلاس چه جاهایی و چطور استفاده کنیم بهتره ؟

ممنون میشم راهنماییم کنین.

 

سوال ویراش شد
سوال شده تیر 15, 1393  بوسیله ی امیدوار (امتیاز 872)   21 63 76
دوباره تگ گذاری شد تیر 16, 1393 بوسیله ی امیدوار

2 پاسخ

+3 امتیاز
 
بهترین پاسخ
اول این که ما توی C اصلا کلاس نداریم که قرار باشه destructor داشته باشیم (بخاطر تگ c که گذاشتین میگم)

اگر منظورتون اینکه چوقت باید destruct کلاس رو نوشتن

توی ++C جاهایی destructor نوشته میشه که قرار منابعی که داخل سازنده یا constructor گرفته میشه آزاد بشه مثلا وقتی که از new داخل سازنده استفاده کردین یا یک فایل رو باز کردین destructor باید نوشته بشه و از delete برای آزاد کردن حافظه استفاده بشه و یا فایل بسته بشه .

توی #C بخاطر داشتن garbage collector این کار خودکار انجام میشه و تقریبا هیچ وقت نیاز به نوشتن destructor برای کلاس نیست و مخرب پیش فرض که خودکار ساخته میشه  کافیه. مگر این که از کد unmanaged استفاده کنین.

ضمنا destructor بصورت خودکار وقتی که شی کلاس قابل دسترسی نباشه (از scope خارج بشه ) صدا زده میشه و نیاز به کار خاصی برای استفاده بهتر نداره .
پاسخ داده شده تیر 16, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد تیر 16, 1393 بوسیله ی امیدوار
سلام درسته c که اصلا کلاس نداره ! از بابت  این اشتباه معذرت خواهی می کنم وتگ مربوط به c رو هم بر می دارم تا بچه هایی که به منظور پرسش و پاسخ به زبان  c وارد سایت میشن کلیک اضافه نداشته باشن. یه سوالی تو ذهنم  داشتم که مربوط به همین بحثه، شما به garbage collector هم اشاره ای داشتین، garbage collector  فقط عمل آزاد سازی حافظه heap رو انجام میده؟ یا برای آزاد سازی فضای حافظه stack هم هستش.
بابت پاسخ و رفع اشکال از شما تشکر می کنم.
garbage collector متغیر هایی که داخل heap هستن و دیگه مرجعی ندارن رو پاک می کنه فضای stack رو اکثر  زبان ها از جمله c یا ++c یا #c بصورت  خودکار پاک می کنن (البته  به غیر از اسمبلی )
+1 امتیاز
سلام

از destructor زمانی استفاده میکنیم که کارمون با منابع تموم شده باشه

مثلا دیگه به فایل نیاز نداریم میبندیمش به ارتباط با بانک اطلاعاتی نیاز نداریم میبندیمش به سوکت نیاز نداریم میبندیمش

و اگه بخواهیم به سایر کلاس ها هم خبر بدیم از destructor استفاده میکنیم

درصورتی که از کد مدیریت شده استفاده کنیم نیازی نیست حافظه رو آزاد کنیم زباله روب به طور خودکار اینکار رو انجام میده
پاسخ داده شده تیر 17, 1393 بوسیله ی alixw24 (امتیاز 656)   2 5 13
...