PDA

View Full Version : از بین بردن آبجکت های new شده



nabegheh95
چهارشنبه 05 اسفند 1388, 08:58 صبح
سلام
من درحال تبديل كد يك برنامه كوچك از C++ به C# هستم. اما براي delete كردن object هاي new شده مشكل دارم.
من object ي از يك كلاس ايجاد مي كنم. و new مي كنم. حالا براي delete كردن و استفاده مجدد از آن (new كردن مجدد آن object) مشكل دارم. چطور بايد اين كار رو بكنم. متشكرم.

negin_2009
چهارشنبه 05 اسفند 1388, 11:01 صبح
objectClass obj;
obj = new objectClass();
delete obj;

اين كد جواب نمي ده؟

SMRAH1
چهارشنبه 05 اسفند 1388, 11:07 صبح
سلام
یک از مهمترین تفاوت های #C با ++C (در منطق برنامه نویسی البته) اینه که شما در #C بر عکس ++C نیازی به delete کردن اشیای ساخته شده ندارید!بلکه این کار رو خوده GC براتون انجام می ده.هر وقت کاری با شی ای ندارید،رهاش کنید تا GC در زمان مناسب کار خودشو انجام بده!

YourCLass c = new YuorClass();
//کار تون رو با این شی انجام بدید
c= null;
موفق باشید

zoncpp
چهارشنبه 05 اسفند 1388, 13:56 عصر
یه سوال برام ایجاد شد.
حالا اگه object که new شده را ، بعد از اتمام کار ، بدون اینکه برابر null قرار بدیم ، مجدد new کنیم. مشکلی نباید پیش بیاد؟!!!

r00tkit
چهارشنبه 05 اسفند 1388, 15:32 عصر
حالا اگه object که new شده را ، بعد از اتمام کار ، بدون اینکه برابر null قرار بدیم ، مجدد new کنیم. مشکلی نباید پیش بیاد؟!!!

نخیر!! چرا پیش بیاد!! فقط متغیر شما به یه جای دیگه توی heap اشاره می کنه

در کل new باعث معین کردن حافظه در heap و بازگشت ادرس ان به متغییر می شه

nabegheh95
چهارشنبه 05 اسفند 1388, 15:40 عصر
فقط متغیر شما به یه جای دیگه توی heap اشاره می کنه


خب آدرس قبلي كه new شده بود چي مي شه؟ آيا آزاد ميشه.
در C++ با new كردن هاي متوالي، حافظه هايي اشغال مي شه كه با delete كردن آنها ، حافظه را آزاد مي كنيم و برنامه مي تونه از اون قسمت حافظه مجدد استفاده كنه . ولي تا وقتي كه اين حافظه delete نشده باشه حتي با new كردن مجدد object مربوطه، اون حافظه همچنان اشغال و برنامه اجازه استفاده نداره.
اما نميدونم در C# ايا با new كردن مجدد و يا الزاما با null كردن object ، حافظه مربوط به آن آزاد مي شه؟

gwbasic
چهارشنبه 05 اسفند 1388, 15:51 عصر
خب آدرس قبلي كه new شده بود چي مي شه؟ آيا آزاد ميشه.
در C++‎ با new كردن هاي متوالي، حافظه هايي اشغال مي شه كه با delete كردن آنها ، حافظه را آزاد مي كنيم و برنامه مي تونه از اون قسمت حافظه مجدد استفاده كنه . ولي تا وقتي كه اين حافظه delete نشده باشه حتي با new كردن مجدد object مربوطه، اون حافظه همچنان اشغال و برنامه اجازه استفاده نداره.
اما نميدونم در C#‎ ايا با new كردن مجدد و يا الزاما با null كردن object ، حافظه مربوط به آن آزاد مي شه؟

آدرس قبلی در Heap بدون Reference باقی می مونه و درنتیجه در زمان مناسب توسط GC پاک خواهد شد