首页 > 其他 > 详细

15. 类的内存结构

时间:2020-05-24 11:48:42      阅读:60      评论:0      收藏:0      [点我收藏+]

一.无虚继承

1.单个类,无虚函数

按成员定义的顺序排列

B::member1

B::member2

 

2.单个类,有虚函数

虚表指针在偏移0

__vfptr

B::member1

B::member2

 

3.单继承,无虚函数

先父类,再子类

B::member1

B::member2

D::member1

D::member2

 

4.单继承,有虚函数

虚表指针在偏移0处,再父类,再子类

__vfptr

B::member1

B::member2

D::member1

D::member2

 

 

5.多继承,无虚函数

按继承列表的顺序,先所有父类,再子类

A::member1

A::member2

B::member1

B::member2

D::member1

D::member2

 

 

6.多继承,有虚函数

技术分享图片

 

 

二.有虚继承

1.单虚继承,无虚函数

2.单虚继承,有虚函数

3.菱形继承,无虚函数

4.菱形继承,有虚函数

 

 

 

 

 

 

class D :public A, public B

D的内存

 

 

 

A的虚表

 

__vfptrA

---------

---------

-------->

&A::TestA

 

A::m_nA

 

B的虚表

 

&D::TestD

 

__vfptrB

-------->

&B::TestB

 

 

 

B::m_nB

 

 

 

 

 

D::m_nD

 

 

 

 

 

 

 

 

 

 

 

D新增的虚函数会挂靠在第一个虚表中。

D重写的虚函数会放在父类各自的虚表中。

如果A没有虚函数,则A没有虚表,有虚表的B会放在内存开始处。

A的虚表、B的虚表都是子类D的虚表

15. 类的内存结构

原文:https://www.cnblogs.com/Nutshelln/p/12945868.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!