פורסם 2010 בספטמבר 715 שנים שלום לכולם,ידוע לי שעבור CLASS ניתן להשתמש ב NEW\DELETE שבעצם מבצעות הקצאת זכרון\שחרור זכרון וקריאה ל constructor/destructorאבל מה עם STRUCT, האם גם שם ניתן להשתמש ב new/delete? כלומר להקצות אותו ישר על ה HEAP במקום MALLOC? ובאופן דומהב למחיקה.תודה.
פורסם 2010 בספטמבר 715 שנים ב-++C ההבדל בין class ו-struct הוא מינורי בלבד - ב-class נראות ברירת המחדל היא private, בעוד שב-struct היא public. למעט פרט זה שתי ההגדרות זהות לחלוטין, ואפשר להשתמש בהם באותו אופן (כן, ל-struct יכולות להיות מתודות, אפשר להשתמש בו בירושה, וכן אפשר להשתמש ב-new). למעשה, ב-++C אפשר לעשות new על כל טיפוס, כולל פרימיטיביים (int, char וכד') ולא מומלץ להשתמש ב-malloc/free כלל (מותר, אבל עדיף new/delete).ועוד הערת אגב אחרונה, למקרה שלא ידעת - לעולם אל תערבב בין malloc/free ו-new/delete. כלומר, אין בעיה להשתמש בשניהם באותה תכנית, אבל זכרון שהוקצה ע"י malloc חייב להיות משוחרר ע"י free, וזכרון שהוקצה ע"י new חייב להיות משוחרר ע"י delete (ועל הדרך, מערך שהוקצה באמצעות new חייב להיות משוחרר ע"י [] delete).
פורסם 2010 בספטמבר 715 שנים מחבר תודה רבה,עזרת לי מאוד, אבל יחד עם זאת עדיין נותרה לי שאלה קטנה.הרי NEW בעצם משתמש בקונסטרקטור, ו DELETE בדיסטרקטור. וב CLASS אני מגדיר אותם בעצמי, ומרגיש "בטוח" להשתמש בהם. אבל באם אלו לא מוגדרים, כמו ב struct שם אין לי את שני אלו, כשאני אעשה delete - מה יקרה? מחיקה שטחית? של פוינטרים ולא של class/struct אחרים?אני מניח שכן, עם זאת לא הצלחתי לברר זאת ב-100%.
פורסם 2010 בספטמבר 715 שנים אם אתה לא מגדיר ctor/dtor, הקומפיילר מגדיר לך אותם כברירת מחדל - כלומר, ctor/dtor שלא מקבלים פרמטרים ולא עושים כלום. זה נכון גם עבור struct וגם עבור class, כי כאמור הם שקולים (אני מניח שהקומפיילר מייעל את התהליך ובכלל לא טורח להפעיל את ה-ctor/dtor במקרה כזה).במקרה של ctor, אם לא הגדרת אותו אז האיברים הפרימיטיביים (כולל מצביעים) של האובייקט פשוט לא יאותחלו (יכילו ערך אקראי), והאיברים שהם אובייקטים יאותחלו באמצעות הctor הדיפולטי (אם לא מוגדר כזה, אז הקומפיילר ידווח על שגיאה).במקרה של dtor, אם לא הגדרת אותו אז פשוט ברגע מחיקת האובייקט לא יקרה כלום, למעט שייקרא ה-dtor של האיברים שלו שהם אובייקטים (כלומר, אם הוא מחזיק מצביע אז מצביע זה לא ישוחרר).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.