1.5 - בעלות וניקוי באמצעות RAII - תרגול
תרגול - ניקוי של בנייה חלקית¶
השתמשו במחלקת File מההרצאה וכתבו מחלקה שמחזיקה שני קבצים. גרמו לפתיחה הראשונה להצליח ולשנייה להיכשל בגלל תיקייה חסרה. הוסיפו לוג ב־destructor של המחלקה החיצונית, וחזו אילו שורות יודפסו.
לאחר מכן תקנו את הנתיב כך ששתי הפתיחות יצליחו. השוו את סדר הניקוי במצב התקין לסדר בזמן כשל בנייה.
כשל לאחר רכישה¶
הוסיפו לפונקציית save שלוש יציאות: return מוקדם, הצלחה רגילה וחריגה אחרי כתיבת שורה. בכל מצב בדקו שמופיעה סגירה אחת לכל פתיחה שהצליחה.
הסבירו למה אין לקרוא ל־fclose ידנית על הערך שחוזר מ־get ואז לתת ל־destructor לרוץ כרגיל. הציעו חוזה לפעולת close מפורשת שמונעת סגירה כפולה ומאפשרת לבדוק את תוצאת הסגירה.
בדיקת העתקה¶
נסו ליצור File שני מתוך הראשון ושמרו את הודעת המהדר. כתבו האם העתקת הpointer בלבד היא העתקת משאב, ומתי היה מוצדק לאפשר copy אמיתי.