נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: operator new[]‎

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Daniel L.
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 September 2006 בשעה 17:03 | IP רשוּם
ציטוט Daniel L.

האם יש תקן שמגדיר מה קורה במקרה שמועבר ל- [] operator new גודל 0?
לדוגמא:
קוד:
char data = new char[0];

חזרה לתחילת העמוד הצג את כרטיס החבר של Daniel L. חפש הודעות אחרות של Daniel L. בקר בדף הבית של Daniel L.
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 03 September 2006 בשעה 13:34 | IP רשוּם
ציטוט אלצ'קו

התשובה נמצאת בספר C++ Primer (במהדורה הרביעית, לא יודע מה עם האחרות). מותר להשתמש ב-new[]‎ כדי ליצור מערך בגודל 0 איברים. האופרטור מחזיר מצביע ייחודי שבו תשתמש כדי לבצע delete[]‎.
המשמעות של "מצביע ייחודי" היא שהמצביע הזה יהיה שונה מכל מצביע אחר ש-new או new[]‎ יחזירו לך בקונטקסט.

עכשיו שים לב לשני דברים:
  • בקשת כזאת יכולה להיכשל, למרות שלכאורה אתה מבקש "0 זיכרון". תמיד תדאג לטיפול ב-bad_alloc, שים new_handler וכו'. בקשה כזאת יכולה בקלות להיכשל.
  • המצביע הזה ייחודי, אבל מצביע לזיכרון בגודל אפס. הוא לא מצביע לשום אובייקט, ולכן פעולת dereferencing על מצביע כזה לא מוגדרת.
באופן כללי, ניהול זיכרון ידני ב-CPP זה דבר מסובך להחריד (כמו כל דבר אחר בשפה הזאת) ולא נעים עוד יותר. חוק האצבע הוא לא להשתמש בניהול זיכרון ידני אלא אם כן אתה ממש ממש חייב, וגם אם אתה חייב, תעשה את זה כמה שפחות.

נ.ב.
כדאי לך להירשם. למה להיות אורח?

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה