当前位置: 首页 > backend >正文

菱形继承和虚基表

虚基表指针

子类虚继承父类:编译器自动在子类对象头部插入 vbptr。

子类普通继承含虚基表指针的父类:子类不创建新的vbptr,复用父类的 vbptr,并创建新的虚基表

虚基表

1.虚基表的本质是个偏移量数组,偏移量是子类对象中虚基表指针到虚基类对象的偏移量

多虚继承


class A { int a; };
class B { int b; };
class C : virtual public A, virtual public B { int c; }; // 多虚继承的对象结构内存偏移	存储内容	说明
0	C::vptr (或 vbptr)	指向 C 的虚基表(vbtable),存储 A 和 B 的偏移量。
4	C::c	C 的成员变量 c。
8	A::a	虚基类 A 的成员(由于虚继承,A 只存储一份)。
12	B::b	虚基类 B 的成员(由于虚继承,B 只存储一份)。

class A { int a; };
class B : virtual public A { int b; };
class C : virtual public A { int c; };
class D : public B, public C { int d; };内存偏移	内容	说明
0	B::vptr	指向 B 的虚函数表
4	B::b	B 的成员变量
8	C::vptr	指向 C 的虚函数表
12	C::c	C 的成员变量
16	D::d	D 的成员变量
20	A::a	共享的 A 子对象

虚函数加多虚继承

class A { virtual void foo() {} int a; };
class B : virtual public A { virtual void bar() {} int b; };
class C : virtual public A { virtual void baz() {} int c; };
class D : public B, public C { void foo() override {} int d; };偏移	内容	说明
0	B::vptr	指向 B 的虚函数表
4	B::vbptr	指向 B 的虚基表
8	B::b	B 的成员变量
12	C::vptr	指向 C 的虚函数表
16	C::vbptr	指向 C 的虚基表
20	C::c	C 的成员变量
24	D::d	D 的成员变量
28	A::vptr	指向 A 的虚函数表
32	A::a	A 的成员变量

http://www.xdnf.cn/news/2663.html

相关文章:

  • go语言八股文(五)
  • 解决Ubuntu20.04重启出现显卡驱动异常的问题(操作记录)
  • k8s基本概念-YAML
  • git 修改用户名和邮箱
  • 【Docker】——在Docker工具上安装创建容器并完成项目部署
  • 线性代数的本质大白话理解
  • 【Linux系统】进程间通信(管道)
  • 8、HTTPD服务--ab压力测试
  • JAVA EE_网络原理_UDP与TCP
  • 二进制、高位低位、位移操作与进制转换全解
  • 国联股份卫多多与北京慧闻科技(集团)签署战略合作协议
  • Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master
  • 完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理
  • Android adb 安装应用失败(安装次数限制)
  • 【现代深度学习技术】循环神经网络07:通过时间反向传播
  • 爬虫学习笔记(二)--web请求过程
  • 从代码学习机器学习 - UMAP降维算法 scikit-learn版
  • 【Linux】基于环形队列的生产消费者模型
  • 机器学习第三篇 模型评估(交叉验证)
  • 腾讯云服务器独立ip服务器优点是什么?服务器需要固定ip吗?
  • WebRtc08:WebRtc信令服务器实现
  • 简单分析自动驾驶发展现状与挑战
  • cURL 入门:10 分钟学会用命令行发 HTTP 请求
  • MySQL慢查询分析工具:EXPLAIN
  • Awesome-Embodied-AI:具身AI机器人领域最全资源汇总(含人形机器人,多足机器人,灵巧手等精选资源)
  • C++11线程间通信同步与Linux中MySQL连接池实现
  • XLSX.utils.sheet_to_json设置了blankrows:true,但无法获取到开头的空白行
  • JDBC 使用流程详解
  • rag增强检索-基于关键词检索的混合检索模式
  • vue响应式原理——vue2和vue3的响应式实现区别