博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多重继承下的virtual functions
阅读量:5273 次
发布时间:2019-06-14

本文共 572 字,大约阅读时间需要 1 分钟。

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

有如下代码示例:

                 

在早期的未符合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。

转载于:https://www.cnblogs.com/MrZHj/p/4476638.html

你可能感兴趣的文章
Android开发心得(转)
查看>>
Redis主从复制原理
查看>>
详解javascript中this的工作原理
查看>>
typedef 与 #define的区别以及 const的用法
查看>>
[ 原创 ]学习笔记- 数据在Activity之间的传递的情况
查看>>
pyquery 匹配NavigableString
查看>>
宏基因组测序及分析
查看>>
FastQC
查看>>
java视频学习记录
查看>>
Xcode7 修改bundle identifier
查看>>
SecureCRT 记录日志设置
查看>>
[转]MVC,MVP 和 MVVM 的图示
查看>>
Qt在线/离线安装包下载网址和说明
查看>>
iOS Core Animation Advanced Techniques(一):图层树、寄宿图以及图层几何学
查看>>
memcached内存管理机制分析
查看>>
C#技巧记录——持续更新
查看>>
python3.6安装pywin32模块
查看>>
python3之正则表达式
查看>>
南阳236----心急的C小加
查看>>
java作业jdk安装
查看>>