关闭

深入探索C++对象模型 读书笔记

178人阅读 评论(0) 收藏 举报

3.2 数据成员的布局

1.对象的数据成员不一定连续存储,中间可能穿插对齐字节


3.4 继承 与数据成员

	在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base classes members的总和,至于derived class members和base classes members的排列顺序在C++ Standard并未强制规定,对于大部分编译器来说,base class membes总是先出现,但是属于virtual base class的除外.
1) 单一继承不含多态
	一般而言,单一无多态的继承并不会增加空间或是存取时间上的额外负担,但是把一个class分解为两层或是多层,有可能会为了"表现class体系之抽象化"而膨胀所需的空间,C++语言保证"出现在derived class 中的base class subobject保持其完整原样性",所以,有可能因为alignment填补的空间在derived class保持其原来的大小,而导致derived class的空间膨胀。
	
class A
{
int i;
char c1;
};

class B : public A
{
char c2;
};
<span style="white-space:pre">	</span>如上代码,sizeof(A)等于8(3个字节填充),sizeof(B)等于12,即派生类对象的大小等于:基类的大小+派生类的成员+字节填充。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:183次
    • 积分:11
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档