1.8 - בעלות משותפת וחיים תלויים - תרגול
תרגול - גרף בעלות¶
בנו עץ קטן שבו הורה מחזיק vector של ילדים, ולכל ילד יש קשר בחזרה להורה. קבעו איזה קשר צריך להיות shared_ptr ואיזה weak_ptr, והוסיפו לוג שמראה שכל האובייקטים מושמדים כשבעל השורש נעלם.
אין להשתמש ב־reset ידני לכל קשר כסידור קבוע של הניקוי. המטרה היא לגרום למבנה הבעלות עצמו לייצג את כוונת התכנון.
קריאה חוזרת מאוחרת - Callback¶
העתיקו את callback מדוגמת Session למשתנה std::function חיצוני. הריצו אותו כשה־session חי, מחקו את הבעלים החזק ואז הריצו שוב. הוסיפו פלט שמבדיל בין ביצוע עבודה לבין התעלמות מאירוע מאוחר.
שתי טעויות לניתוח¶
הסבירו למה יצירת shared_ptr מתוך owner.get יוצרת סיכון של סגירה כפולה. הסבירו גם למה קריאה ל־weak.expired ולאחר מכן גישה לנתון דרך pointer גולמי אינה שקולה ל־weak.lock.
כתבו מה צריך להוסיף אם שני threadים קוראים ל־callback ומשנים events באותו זמן. אין צורך לממש את הסנכרון בשלב הזה, אבל צריך לזהות איזו בעיה shared ownership כן פותרת ואיזו נשארה.