(虚)继承类的内存大小计算

本文探讨了虚继承类在C++中的内存大小计算,重点在于理解虚函数表vptr和虚函数表vtbl在对象内存布局中的作用。通过实例分析,解释了为什么含有虚函数的类在内存中会增加4个字节,即vptr的大小,以便于实现动态绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天接触到了虚继承类的大小计算,以前不是很清楚,所以刚开始没想出来,然后百度了一下发现网上各种的博客,然后选了几篇看了下。感觉举的例子大体都是一样的,但是有些地方个人感觉说的不是让人很明白,有点难理解,所以自己重新整理了下,以后忘了可以过来复习一下...

虚函数的工作原理涉及到了虚函数表指针vptr和虚函数表vtbl,当一个对象调用了虚函数,实际的被调用函数通过下面的步骤确定:找到对象的 vptr 指向的 vtbl,然后在 vtbl 中寻找合适的函数指针。如果类定义了虚函数,该类及其派生类就要生成一张虚拟函数表,即vtable。而在类的对象地址空间中存储一个该虚表的入口,占4个字节,这个入口地址是在构造对象时由编译器写入的。所以,由于对象的内存空间包含了虚表入口,编译器能够由这个入口找到恰当的虚函数,这个函数的地址不再由数据类型决定了。因为包含了虚函数的入口(4字节),个人感觉就是个指针。所以我们在计算类的大小的时候就要将其包含在内。

首先来一个不同的类继承的例子,也是众多博主举的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值