לדלג לתוכן

1.3 - ערכים זמניים וחיי אובייקטים - תרגול

תרגול - ציור של חיי אובייקטים

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

קלט שחי רק בקריאה

כתבו פונקציה שמקבלת const Trace& ומדפיסה את התווית. קראו לה עם אובייקט זמני, ואחר כך הדפיסו שורת סימון. ציינו היכן בדיוק מסתיימים חיי הזמני, והאם מותר לפונקציה לשמור מצביע אליו לתור עבודה.

שינוי של הממשק

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

#include <string>

const std::string& make_title() {
    std::string title = "job";
    return title;
}

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

תלות בין שדות

צרו מחלקה עם שני שדות Trace. שנו רק את סדר רשימת האתחול, בלי לשנות את סדר ההצהרה, וחזו אם סדר הבנייה משתנה. הסבירו מה צריך לשנות בפועל אם שדה שני חייב להשתמש בשדה ראשון בזמן השמדתו.