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才决定了
内部方法的功能”。
潘爱民