תרגול זהות ובעלות ברכיב¶
תרגיל ראשון - חשבון references¶
עקבו אחרי כל QueryInterface וRelease בדוגמה ורשמו מי מחזיק reference בכל נקודה. שנו את סדר שחרור reader וwriter בלי להשתמש במצביע אחרי שחרורו. הסבירו מדוע האובייקט אמור להימחק פעם אחת בשני הסדרים.
הוסיפו בירור IID אקראי ובדקו גם HRESULT וגם איפוס output. אל תוסיפו Release עבור בירור שנכשל.
תרגיל שני - ממשק חדש¶
הוסיפו ממשק ICompareValue עם מתודה שמחליפה את הערך רק אם הוא שווה לערך צפוי. המתודה תחזיר בoutput האם ההחלפה בוצעה. דרשו שהבדיקה וההחלפה יהיו אטומיות, ובדקו שני threadים שמנסים להחליף את אותו ערך.
הסבירו מדוע Read ואז Write מתוך הלקוח אינם מימוש שקול. הוסיפו בדיקת זהות דרך שלושת הממשקים.
תרגיל שלישי - מפעל ללא הפעלה¶
ממשו IClassFactory שיוצר את Value מקומית, בלי רישום במערכת. בדקו בקשה לממשק נתמך, בקשה לממשק חסר וouter שאינו null. הגדירו במפורש שהניסוי אינו מאפשר פריקת DLL, ולכן LockServer צריך להחזיר E_NOTIMPL עד שתוסיפו מנגנון server locks אמיתי.
שרטטו מעגל בעלות שבו אובייקט א מחזיק reference לב ואובייקט ב מחזיק reference לא. הוסיפו פעולת ניתוק מפורשת והסבירו מי אחראי לקרוא לה.