news 2026/7/5 13:32:22

关于C++多重继承下虚表结构的问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于C++多重继承下虚表结构的问题

昨天写一个项目时遇到一个很诡异的现象 如下代码所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

classParentA {

public:

inta=0x123456;

virtualvoidvFunParentA(){

std::cout <<"vFunParentA"<< std::endl;

}

};

classParentB {

public:

intb = 0x456;

virtualvoidvFunParentB() {

std::cout<<"vFunParentB"<<std::endl;

inti = 0;

}

};

classChild:publicParentA,publicParentB {

intc = 0x789;

};

intmain()

{

//注意这里使用void*

void* pChild =newChild;

//强转

ParentB* pParentB = (ParentB*)pChild;

//强转

ParentA* pParentA = (ParentA*)pChild;

pParentB->vFunParentB();

pParentA->vFunParentA();

getchar();

}

现在执行后我们的预期输出为

vFunParentB
vFunParentA

但实际输出:

vFunParentA
vFunParentA

当时百思不得其“姐”,最后发现是自己对多重继承下的虚表内存结构不够了解。

博主另一外一篇关于虚表的:
c-15 c++虚表

在多重继承下Child内存结构应该是如下结构:

由于我们使用void *类型强转为ParentBParentA返回的指针地址依然是ParentA,而没有做内存偏移计算.如下图所示:

当我们不适用void*强转后编译器会帮我进行偏移计算会迫使ParentB偏移8字节,从而使pParentB指向正确的内存虚表。

在单一继承下不会出现这类问题,我们最后看下本例中的内存结构:



到此这篇关于关于C++ 多重继承下虚表结构的问题的文章就介绍到这了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 13:31:29

Redis分布式锁进阶第三十七篇

在分布式系统中&#xff0c;Redis 分布式锁凭借高性能、易接入的特性&#xff0c;成为跨节点互斥控制的主流方案。基础版SET key value NX EX虽能实现简单互斥&#xff0c;但在长事务、集群部署、异常容灾等场景下存在明显短板。本文聚焦 Redis 分布式锁进阶能力&#xff0c;从…

作者头像 李华
网站建设 2026/7/5 13:29:20

奇迹 MU 剑与翼手游官网下载:奇迹 MU 剑与翼最新官方下载渠道

奇迹 MU 剑与翼手游官网下载&#xff1a;奇迹 MU 剑与翼最新官方下载渠道 《奇迹 MU 剑与翼》又名复古 1.03H 奇迹正版、卓越打金奇迹手游&#xff0c;由安徽游昕联合忆往游戏正版运维复刻的经典魔幻 MMORPG。游戏完整还原原版奇迹端游 1.03H 全部内容&#xff0c;勇者大陆、仙…

作者头像 李华
网站建设 2026/7/5 13:28:22

SRC漏洞挖掘入门:8种实战姿势与零基础进阶路径

1. 项目概述&#xff1a;从“捡漏”到“挖洞”的思维跃迁最近在抖音和一些技术论坛上&#xff0c;经常刷到“SRC漏洞挖掘”、“黑客技术零基础入门”这类话题&#xff0c;热度一直很高。很多刚入门安全的朋友&#xff0c;可能觉得“挖洞”是件很神秘、门槛极高的事情&#xff0…

作者头像 李华
网站建设 2026/7/5 13:24:00

Three.js 城市光影教程

城市光影 City Light ▶ 在线运行案例 案例合集&#xff1a; 三维可视化功能案例&#xff08;threehub.cn&#xff09;开源仓库github地址&#xff1a; https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 onBeforeCompile 注入 …

作者头像 李华
网站建设 2026/7/5 13:19:56

数学的本质是什么?——数学为什么如此不可思议地有效-龍德明宇

数学的本质是什么&#xff1f;数学为什么如此不可思议地有效 作者&#xff1a;龍德明宇 1960年&#xff0c;物理学家尤金维格纳写了一篇著名的文章&#xff0c;标题是《数学在自然科学中不可思议的有效性》。他的困惑很简单&#xff1a;为什么黎曼几何刚好能描述引力&#xff1…

作者头像 李华
网站建设 2026/7/5 13:19:33

主动推理-信息组织

2026年07月03日 23:54 发言人 00:00 也许哺乳动物大脑最迷人的能力之一是它能够产生灵活的行为&#xff0c;这种行为能在不同的情境中得到普遍化应用。打个比方&#xff0c;你花了几个星期的时间&#xff0c;专门学习如何烹调出最地道的烤宽面条。你在自己的厨房里掌握了这门…

作者头像 李华