//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄
一、概念:
1.没有继承情况,vptr存放在对象的开始位置,以下是Base1的内存布局
m_iData :100
2.单继承的情况下,对象只有一个vptr,它存放在对象的开始位置,派生类子对象在父类子对象的最后面,以下是D1的内存布局
B1:: m_iData : 100
B1::vptr :4294800
B2::vptr :4294776
D::m_iData :300
4. 虚拟继承情况下,虚父类子对象会放在派生类子对象之后,派生类子对象的第一个位置存放着一个vptr,虚拟子类子对象也会保存一个vptr,以下是VD1的内存布局
Unknown :4294888
B1::vptr :4294864
VD1::vptr :4294944
VD1::m_iData :200
VD2::Unknown :4294952
VD::m_iData :500
B1::m_iData :100
5. 棱形继承的情况下,非虚基类子对象在派生类子对象前面,并按照声明顺序排列,虚基类子对象在派生类子对象后面
VD1::Unknown : 4294968
VD2::vptr :4294932
VD2::m_iData :300
B1::vptr :4294920
B1::m_iData :100
网友评论