לדלג לתוכן

1.7 - בעלות יחידה ותצוגות - תרגול

תרגול - בעלות או השאלה

כתבו מחלקת Buffer שמחזיקה מערך bytes באמצעות unique_ptr וגודל. הגדירו פעולה שמחזירה span לקריאה ופעולה אחרת שמחזירה span לכתיבה. אסרו copy ואפשרו move.

כתבו פונקציה שמחשבת מספר bytes שאינם אפס מתוך span לקריאה. הפונקציה אינה צריכה לדעת אם הבעלים הוא Buffer, vector או מערך מקומי.

העברת אחריות

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

הסבירו למה get אינו מתאים למסירת בעלות, ולמה release ללא מקבל אחריות יוצר דליפה.

ניתוח תצוגה פגומה

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

אין להריץ גישה לתצוגה הידועה כפגומה רק כדי לחכות לקריסה.