delete או delete[]

voguemaster

New member
delete או delete[]

אם אני מקצה משהו כזה:
char* string = new char[10]; // do some stuff delete string;​
זליגת זיכרון או לא ?
 

® רן

New member
קודם כל

זה רעיון רע לקרוא למשתנה string משום ש ב ++C יש קלאס סטנדרטי בשם הזה. זה יעבוד, אבל זה יבלבל את הקורא, ולכן לא מומלץ. ולעצם השאלה: מבחינת התקן, מה שעשית הוא "לא מוגדר" (undefined behavior). לכן, אין אחריות - במערכות מסוימות יכול להיות זליגת זיכרון, במערכות אחרות יכול להיות קראש כללי של התוכנית, ובסביבות אחרות יכול להיות שזה יעבוד מצוין.
 

xxxy2

New member
פשוט...

במקרה כזה זו לא זליגת זיכרון, אך במקרה שזהו מערך של אובייקטים (C++ OBJECTS), המחיקה בלי ה- [] תקרא אך ורק ל DESTRUCTOR של האובייקט הראשון במערך, ואז, אם ב DESTRUCTORS אתה אמור לשחרר זיכרון דינמי שבשימוש פנימי של האובייקט, זיכרון זה לא ימחק... אני תמיד משתמש ב- [], למנוע בעיות
 

voguemaster

New member
כן, זה ידוע

אפילו מאיירס אומר שעבור טיפוסים בסיסיים ההתנהגות של זה היא לא מוגדרת. מה שכן, מעניין אותי לדעת אם יש מימושים של קומפיילרים שבהם זו זליגה.
 

selalerer

New member
הלוגיקה שלי אומרת ככה:

delete זאת פונקציה שמקבלת כפרמטר מצביע מטיפוס זה או אחר. אם היא נקראת ללא ה[] אז היא מוחקת אובייקט אחד מהסוג של מצביע, אם היא נקראת עם ה[] אז היא מוחקת מערך של האובייקטים מסוג המצביע שמתחיל בכתובת הזו, ולכן לפי הבנתי, זו זליגת זיכרון. כמובן שזה רק הראש שלי ולא נסיון ולא קריאה של הסטנדרט.
 

xxxy2

New member
ראוי לדייק...

המערך של הזיכרון ימחק גם עם [] וגם בלי, אבל הבעיה היא שהוא לא יקרא ל DESTRUCTORS של כל האובייקטים שבמערך...
 
למעלה