++c
برنامه نویسان را قادر می سازد تا تخصیص حافظه و یا آزادسازی حافظه
را برای هر نوع داده ای در برنامه مدیریت و کنترل کنند. این
قابلیت، مدیریت حافظه پویا نامیده می شود و توسط عملگرهای
new
و
delete
صورت می پذیرد. دو عملگر مذکور در فایل
new.h
قرار دارند. لذا برای به کارگیری این دو عملگر باید از دستور
#include <new.h>
در برنامه استفاده کنیم. دستورات زیر را در نظر بگیرید:
Time *timePtr;
timePtr = new Time;
عملگر
new
در دستورات فوق شیئی را با اندازه داده ای از نوع
Time
می سازد و سازنده این شیء را فراخوانی کرده و
یک اشاره گر از نوع داده قرار گرفته در سمت راست عملگر
new
برمی گرداند. توجه داشته باشید که عملگر
new
برای هر نوع داده ای (مانند
double
و
int
و ...) و یا کلاسها می تواند به کار رود. اگر
new
نتواند فضای خالی برای شیء در حافظه بیابد، یک اشاره گر0 را
باز می گرداند. برای نابودسازی شیئی که به صورت پویا برای آن حافظه
تخصیص داده شده، از عملگر
delete
به صورت زیر استفاده می کنیم:
دستور فوق ابتدا نابودکننده شیء را که
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
استفاده نمایید و
delete
را به تنهایی به کار نبرید.
|