c++中派生类对象的内存布局


主要从三个方面讲
1.单一继承
2.多重继承
3.虚拟继承

1.单一继承
(1)派生类完全拥有基类的内存布局,并保证其完整性
派生类可以看做是完整的基类的object再加上派生类自己的object。如果基类中
没有虚成员函数,那么派生类与具有相容功能的非派生类将不带来任何性能上
的差异,另外,一定要保证基类的完整性,实际内存布局由编译器自己决定
vs里,把虚拟指针放在最前面,接着是基类的对象,最后是派生类自己的对象
class A
{
int b;
char c;
};
class A1 : public A 
{

char a;

};
int main()
{
cout << sizeof( A ) << "" <<sizeof( A1 ) << endl;
return 0;
}

输出 8   12 
A类的话 一个 int ,一个char ,5个字节,内存对齐一下,8个字节
A1的话,一个int  两个char,要保证对象的完整性,那么一定保证A1类
前面的几个自己一定要与A类完全一样,也就说,A类作为内存不起的3个字节
也是要出现在A1里面的,、

(2)虚指针怎么处理、
还是视编译器而定,VS是永远把vptr放在对象的最前面。如果基类中含有虚函数那么
处理情况与上边一样,可以,如果基类中没有虚函数而派生类有的话,
那么如果把vptr放在派生类的前面的话,将会导致派生类中基类成分并不在最前面,这将
带来什么问题呢?举例:假设A不含虚,而A1含
A *pa;
A1 obj_A1;
pa  = &obj_A1;
如果A1 完全包含




2.多重继承  : VS的内存布局是按照声名顺序排列内存的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值