大龙的博客

常用链接

统计

最新评论

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

posted on 2007-02-03 20:32 大龙 阅读(248) 评论(0)  编辑 收藏 引用

>>>>>>>>>>NonDelegatingAddRef()" trackback:ping="http://www.cppblog.com/fwxjj/services/trackbacks/18315.aspx" /> -->

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理