设为首页 加入收藏

TOP

1.1 C++对象模式(The C++ Object Model)(3)
2013-10-07 14:50:22 来源: 作者: 【 】 浏览:67
Tags:1.1 对象 模式 The Object Model

1.1 C++(www.cppentry.com)对象模式(The C++(www.cppentry.com) Object Model)(3)

这个函数有可能在内部被转化为:

  1. // 可能的内部转换结果  
  2. // 虚拟C++(www.cppentry.com)代码  
  3. void foobar( X &_result )  
  4. {  
  5.    //构造_result  
  6.    // _result 用来取代 local xx ...  
  7.    _result.X::X();  
  8.  
  9.    // 扩展 X *px = new X;  
  10.    px = _new( sizeof( X ) );  
  11.    if ( px != 0 )  
  12.         px->X::X();  
  13.  
  14.    // 扩展 xx.foo() 但不使用 virtual 机制  
  15.    // 以 _result 取代 xx  
  16.    foo( &_result );  
  17.  
  18.    // 使用 virtual 机制扩展 px->foo()  
  19.    ( *px->vtbl[ 2 ] )( px )  
  20.  
  21.    // 扩展 delete px;  
  22.    if ( px != 0 ) {  
  23.       ( *px->vtbl[ 1 ] )( px );  // destructor  
  24.       _delete( px );  
  25.    }  
  26.  
  27.    // 无须使用 named return statement  
  28.    // 无须摧毁 local object xx  
  29.    return;  
  30. }; 

喔,真是差异颇大,不是吗!当然,此刻你并不需要了解所有的转化过程及结果。我会在后继章节解释其中每一个操作的用意,以及为什么那么做。我想你会回头看,一边玩弄你的手指头,一边说"喔欧,是的,当然",同时奇怪你怎么会曾经迷惘过。

译注:我可以先用这张图解除你的部分疑惑。由于X有两个virtual functions,一个是destructor,一个是foo,所以X object布局如下:

 

前述程序代码中的px->_vtbl[0]指向X的type_info object,px->_vtbl[1]指向X::~X(),px->_vtbl[2]指向X::foo()。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.3 对象的差异(An Object Disti.. 下一篇Eclipse 3.7.2发布 修复大量bug

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: