C++对象内存结构

对简单对象来说,内存结构布局很简单,遵循以下描述:

1、非静态数据成员是影响对象所占据内存大小的主要因素,随着对象的增加而增加;

2、所有对象共享一份静态数据成员,用sizeof计算对象大小时不会包含静态数据成员占据内存的大小;

3、静态成员函数和非静态成员函数不影响对象内存的大小;

4、如果对象中包含虚函数,会增加4字节的空间用来保存虚函数表指针。

 

对单继承类,遵循如下描述:

在派生类实例头部存在一个基类实例,虚函数表与基类公用一个。基类的内存布局和简单对象的内存布局一样,派生类内存布局就是基类的内存布局下面加上派生类自己添加的成员所构成的内存布局,同时只是修改基类的虚函数表而不会新增虚函数表指针。对一个类来说,整个程序只有一个虚函数表,不管对象有多少。

 

对多重继承基本上和单继承一样,只有一种例外,就是派生类派生自具有共同基类的两个父类时会造成创建该派生类的父类的父类的两个实例对象,解决方法就是采用虚继承,虚继承可以只产生一个同一父类实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值