addref-------->>>>>>>>>>>NonDelegatingAddRef()

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

你可能感兴趣的:(addref-------->>>>>>>>>>>NonDelegatingAddRef())