addref-------->>>>>>>>>>>NonDelegatingAddRef()
剛剛我問了潘愛民老師這個問題,他的回答如下: ?? 我曾經用下面的類比來講述過這個問題,看是否有助于你的理解。 ?
? ?
? 假設有兩個二進制結構一樣的vtable ?
? class ? Vtable1{ ?
? virtual ? void ? __stdcall ? Method1(int, ? int) ? = ? 0; ?
? virtual ? void ? __stdcall ? Method2(int) ? = ? 0; ?
? }; ?
? class ? Vtable2{ ?
? virtual ? void ? __stdcall ? Operator1(int, ? int) ? = ? 0; ?
? virtual ? void ? __stdcall ? Operator2(int) ? = ? 0; ?
? }; ?
? ?
? 假設某段程序實現了其中之一 ?
? class ? CMyObject ? : ? public ? Vtable1{ ?
? …… ?
? virtual ? void ? __stdcall ? Method1(int, ? int); ?
? virtual ? void ? __stdcall ? Method2(int); ?
? }; ?
? ?
? 客戶的用法 ?
? 實例化CMyObject ? : ?
? Vtable1 ? *p1 ? = ? CreateObject(...); ?
? 代碼片斷1: ?
? p1->Method1(a, ? b); ?
? 代碼片斷1: ?
? Vtable2 ? *p2 ? = ? (Vtable2 ? *)p1; ?
? p2->Operator1(a, ? b); ?
? ?
? ?
? 這兩段代碼調用的是同一個方法,這里的要點是“指針類型并不重要,vtable才決定了 ?
? 內部方法的功能”。 ?
? ?
? ?
? 潘愛民??