مدیریت حافظه پویا

   ++c برنامه نویسان را قادر می سازد تا تخصیص حافظه و یا آزادسازی حافظه را برای هر نوع داده ای در برنامه مدیریت و کنترل کنند. این قابلیت، مدیریت حافظه پویا نامیده می شود و توسط عملگرهای new و delete صورت می  پذیرد. دو عملگر مذکور در فایل new.h قرار دارند. لذا برای به کارگیری این دو عملگر باید از دستور #include <new.h> در برنامه استفاده کنیم. دستورات زیر را در نظر بگیرید:

Time *timePtr;
timePtr = new Time;

   عملگر new در دستورات فوق شیئی را با اندازه داده ای از نوع Time می سازد و سازنده این شیء را فراخوانی کرده و یک اشاره گر از نوع داده قرار گرفته در سمت راست عملگر new برمی گرداند. توجه داشته باشید که عملگر new برای هر نوع داده ای (مانند double و int و ...) و یا کلاسها می تواند به کار رود. اگر new نتواند فضای خالی برای شیء در حافظه بیابد، یک اشاره گر0 را باز می گرداند. برای نابودسازی شیئی که به صورت پویا برای آن حافظه تخصیص داده شده، از عملگر delete به صورت زیر استفاده می کنیم:

delete timePtr;

   دستور فوق ابتدا نابودکننده شیء را که timePtr به آن اشاره می کند، فراخوانی کرده؛ سپس حافظه اختصاص داده شده به شیء را آزاد می سازد و حافظه برای تخصیص به شیء دیگری آماده می شود.

++c اجازه مقداردهی اولیه را همزمان با تخصیص حافظه پویا به یک شیء می دهد. به دستور زیر توجه کنید:

double *ptr=new double(3.14159);

   دستور فوق حافظه تخصیص داده شده به داده ای از نوع double را با 3.14159 مقداردهی می کندو اشاره گر به آن را در Ptr قرار می دهد. روش مشابه دستور فوق می تواند برای آرگومانهای تابع سازنده یک شیء به کار رود. به دستور زیر توجه کنید:

Time *timePtr= new Time(12,0,0);

   دستور فوق حافظه تخصیص داده شده به شیئی از نوع کلاس Time را با 12 ظهر مقداردهی کرده و اشاره گر با آن را در timePtr قرار می دهد.

عملگر new امکان تخصیص حافظه پویا برای آرایه ها را نیز فراهم می سازد.  به عنوان مثال برای یک آرایه 10 عنصری از نوع عدد صحیح توسط دستور زیر حافظه پویا تخصیص می یابد:

int *gradesArray=new int[10];

   در دستور فوق اشاره گر به اولین عنصر در حافظه پویای تخصیص یافته به آرایه 10  عنصری از نوع عدد صحیح در اشاره گر gradesArray قرار می گیرد.

برای آزادسازی حافظه تخصیص داده شده به آرایه ها از دستور زیر می توان استفاده کرد:

delete [] gradesArray;

   نکته: توجه داشته باشید که برای آزادسازی خانه های حافظه تخصیص یافته به یک آرایه از [] delete استفاده نمایید و delete را به تنهایی به کار نبرید.

 

 

 

   معرفی کامپيوتروبرنامه نويسی

   ساختارهای کنترلی

   توابع

   آرايه ها

   اشاره گر ها و رشته ها

   کلاسها

   گرانبار کردن عملگر ها

 
 
 
   
 
 
 

حق کپی رایت محفوظ می باشد