C++/זיכרון דינמי: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Space3000 (שיחה | תרומות)
אין תקציר עריכה
 
Space3000 (שיחה | תרומות)
שורה 3:
 
== כלים להקצאת זיכרון דינאמית ב-C++ ==
מאחר ובשפת C++ יש תמיכה מלאה בכל הספריות הסטנדרטיות של C,
ישנם כלים בשפת C++ המאפשרים הקצאה דינמית של משתנה בודד וכן מערך.
נתן להשתמש בפונקציות של C כגון malloc ו-free, אך הדבר אינו מומלץ,
כיוון שב-C++ יש כלים מתקדמים יותר.
ב-C++ מקצים זיכרון באופן דינמי באמצעות אופרטור new.
ישנםישנה כליםצורה בשפת C++ המאפשריםהמאפשרת הקצאה דינמית של משתנה בודד וכן מערך.
=== משתנה בודד ===
*תקציר:
<div style="text-align:left; direction:ltr;"><pre>type *variable=new type;</pre></div>
* הסבר:
הקצאה ל- variable מסוג מצביע ל-type מקום בזיכרון מסוג של type.
*דוגמא:
<div align="left" dir="ltr" >
<pre>
int *new_integer=new int;// הקצאה דינמית של מספר שלם.
</pre></div>
=== מערך ===
*תקציר:
<div style="text-align:left; direction:ltr;"><pre>type *array=new type[array_length];</pre></div>
*הסבר:
הקצאה ל-array מסוג מצביע ל-type מקום בזיכרו שהוא מערך של ערכים של type באורך array_length.
*דוגמא:
<div align="left" dir="ltr" >
<pre>
#define CELL_COUNT 10
int *new_array=new int[CELL_COUNT];// הקצאה דינמית של מערך של 10 מספרים שלמים.
</pre></div>
 
 
== שחרור הזיכרון שהוקצה ==
על מנת לשחרר את הזיכרון שהוקצה נתן להשתמש באופרטור delete.
*תקציר:
<div style="text-align:left; direction:ltr;"><pre>
delete variable;
delete[] array;
</pre></div>
*הסבר:
variable הינו משתנה בודד שהוקצה באמצעות new.
 
array הוא מערך שהוקצה באמצעות new[].
חשוב לציין כי במקרה של מערך חייבים להוסיף סוגריים מרובעות הנ"ל.
תוצאה של
<div style="text-align:left; direction:ltr;"><pre>
int *array=new int[length];
delete array;
</pre></div>
אינה מוגדרת.
*דוגמא:
<div style="text-align:left; direction:ltr;"><pre>
// משתנה בודד
int *myint=new int;
// פעולות נוספות.
delete myint;
 
// מערך
int *myarray=new int[length];
// פעולות נוספות
delete[] myarray;
 
</pre></div>