码迷,mamicode.com
首页 > 其他好文 > 详细

多重继承下的virtual functions

时间:2015-05-04 19:51:16      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

有如下图所示的继承关系:

技术分享

有如下代码示例:

技术分享          技术分享        技术分享

在早期的未符合c++标准的的编译器上是会报错的,因为对于clone()函数来说,编译器不知道怎么处理处理。但是时至今日c++做了修改,那么这是怎么实现的呢?

这个问题有以下两种解决方案:

一种是在虚函数表中不光存放真正调用函数的地址,还存上需要对this指针进行调整的偏移,在调用时,直接给this指针加上偏移;另一种方法就是使用thunk,在thunk中调整this指针,再对函数进行调用。但是就两种方法来讲,thunk的效率明显要较高,Think允许virtual table slot继续内含一个简单的指针,因此多重继承不会需要任何空间上的负担。slot中的地址可以直接指向一个virtual function, 也可以指向一个相关的thunk(需要调整this指针的话)于是,对于那些不需要额外调整this指针的virtual function而言,也就不需要承载效率上的额外负担了。除了上面说的在调用函数是需要调整this指针的offset,this指针还有第二个额外负担,列子如下:

技术分享

虽然两个delete操作导致相同的Derived destructor,但是他们需要两个不同的slots。

多重继承下的virtual functions

标签:

原文地址:http://www.cnblogs.com/MrZHj/p/4476638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!