PDA

View Full Version : سوال: چگونگی عملکرد مخرب در c++



saleh.hi.62
پنج شنبه 03 تیر 1389, 12:57 عصر
با سلام
من میخوام بدونم وقتی ما یک کلاس تعریف میکنیم فقط اگر در کلاس مخرب تعریف بشه این به سورت اتوماتیک نمونه ساخته شده از کلاس رو نابود میکنه؟

مثل :



()rectangle~
}
{

حامد مصافی
پنج شنبه 03 تیر 1389, 13:01 عصر
خير، مخرب براي اينكه كه شما منابعي رو كه گرفتيد آزاد كنيد، اگر مخرب رو ننويسيد كلاس از بين خواهد رفت، اما ممكن است منابع شما باقي بماند. پس خود مخرب به تنهايي كاري انجام نمي دهد.

saleh.hi.62
پنج شنبه 03 تیر 1389, 17:29 عصر
خير، مخرب براي اينكه كه شما منابعي رو كه گرفتيد آزاد كنيد، اگر مخرب رو ننويسيد كلاس از بين خواهد رفت، اما ممكن است منابع شما باقي بماند. پس خود مخرب به تنهايي كاري انجام نمي دهد.
پس ما اگه از حافظه داینامیک استفاده نکنیم نیازی هم به استفاده از مخرب نداریم درسته؟

tdkhakpur
پنج شنبه 03 تیر 1389, 17:37 عصر
عموما سازنده ها و مخربها به عنوان ابزاری برای برنامه نویسی هستند که از بین بردن حافظه رزرو شده تنها یکی از مواردی هست که مخربها میتوانند برای از بین بردن آنها به برنامه نویس کمک کنند.


پس ما اگه از حافظه داینامیک استفاده نکنیم نیازی هم به استفاده از مخرب نداریم درسته؟

اجباری نیست شما از مخرب برای این کار استفاده کنید میتوانید متدی را هم در کلاس داشته باشید که عمل بسته شدن یا به عبارتی پاکسازی را برای شما انجام دهد ولی در این حالت شما باید اجرای این متد را در هنگام خروج به برنامه تان اضافه کنید در صورتی که مخرب بصورت اتومات این کار را انجام میداد.

Salar Ashgi
پنج شنبه 03 تیر 1389, 17:38 عصر
پیاده سازی مخرب به عهده خود شماست ، البته در زبانهایی مثل ++C !

چون در زبانهایی مثل C#,Java معمولا 99 درصد مواقع نیازی به پیاده سازی و تعریف تابع مخرب نیست ،

چون معماری Garbage Collection عمل مدیریت حافظه بر عهده IDE گذاشته است !

و ذکر این نکته که : یک کلاس میتواند بیش از یک سازنده داشته باشد ولی در هر حال همیشه

یک مخرب دارد .

موفق باشید .

Salar Ashgi
پنج شنبه 03 تیر 1389, 17:42 عصر
پس ما اگه از حافظه داینامیک استفاده نکنیم نیازی هم به استفاده از مخرب نداریم درسته؟


99 درصد مواقع ، معمولا اینطور هست !

حامد مصافی
پنج شنبه 03 تیر 1389, 17:45 عصر
پس ما اگه از حافظه داینامیک استفاده نکنیم نیازی هم به استفاده از مخرب نداریم درسته؟
خير، اما شما كه با Qt كار مي كنيد مي توانيد مخرب ها را فراموش كنيد، چون خود Qt حافظه گرفته شده را به صورت خود كار آزاد مي كند.

saleh.hi.62
پنج شنبه 03 تیر 1389, 21:55 عصر
جدی؟
یعنی QT هم مثل دات نت یا جاوا garbage collectionn داره?

حامد مصافی
جمعه 04 تیر 1389, 11:21 صبح
نه مثل اونها، Qt حافظه گرفته شده توسط يك كلاس رو هنگام حذف كلاس به صورت خودكار آزاد ميكنه.