האופרטורים new ו-delete
שיעור 11 מתוך 14 בקורס מצביעים ב-C++ של Coddy.
הדבר החשוב האחרון שעליך ללמוד על מצביעים הוא הקצאת זיכרון דינמית.
הקצאת זיכרון דינמית מאפשרת להקצות זיכרון בזמן הריצה. פירוש הדבר שאינך צריך להצהיר על משתנים ולאתחל אותם לפני שהתוכנית מתחילה כשאתה משתמש במצביעים; אנחנו יכולים להקצות מקום בזיכרון עבור משהו שישמש בהמשך.
לשם כך, אנחנו משתמשים במילת המפתח new.
int *ptr; // הכרזה על מצביע
// הקצאת זיכרון עבור 1 int:
ptr = new int; // ptr מצביע על הזיכרון הזהכשמשתמשים ב-new, למעשה אנחנו שומרים מקום בזיכרון שלנו עבור מספר שלם אחד שנוכל להשתמש בו בהמשך.
אבל, כדי שלא יתרחשו דליפות זיכרון, שבהן נעסוק בשיעור הבא, עלינו למחוק כל זיכרון שהקצינו באמצעות new לפני סיום התוכנית, באמצעות מילת המפתח delete.
int *ptr;
ptr = new int;
*ptr = 10;
cout << "*ptr = " << *ptr << endl;
delete ptr; // שחרור הזיכרון שהוקצהכפי שניתן לראות, באמצעות מילת המפתח delete אנחנו מוחקים בהמשך את הזיכרון שהקצינו עבור המצביע ptr, וכעת המקום הזה בזיכרון מוקצה מחדש ופנוי. בשיעור הבא תלמד על החשיבות של ניהול דליפות זיכרון.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
קלהקצה זיכרון באופן דינמי לשלושה מספרים שלמים באמצעות המצביעים ptrA, ptrB ו-ptrC. השתמש בשלושת המספרים השלמים שניתנו כארגומנטים של הפונקציה, והגדר את הערכים בכתובות שעליהן מצביעים המצביעים כך שיהיו שווים למספרים בהתאמה. את המספר השלם הראשון ל-ptrA, את המספר השלם השני ל-ptrB ואת המספר השלם האחרון ל-ptrC, ולבסוף הדפס את הערכים שאליהם מצביעים כל המצביעים לאחר ביטול הפניה, כשהם מופרדים ברווח
אין לכתוב את הפונקציה <i>main()</i>
נסו בעצמכם
#include <iostream>
using namespace std;
void dynamicMemory(int a, int b, int c) {
// כתבו כאן את הקוד שלכם
}
// אל תכתבו את הפונקציה main()כל השיעורים ביחידה מצביעים ב-C++
תרגלו בעצמכם: קומפיילר C++ אונליין