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

原创 2015年07月07日 14:47:59

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,即派生类对象的大小等于:基类的大小+派生类的成员+字节填充。

相关文章推荐

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

  • 2012年06月22日 22:48
  • 337KB
  • 下载

[读书笔记] 深入探索C++对象模型-第四章-Function语义学(下)

继续第四章的内容整理,这一部分也是第四章的最后一部分,是关于成员函数指针的,第三章下的内容整理是关于成员变量指针的,这个则是成员函数指针,二者可以互为参考。 1. 非虚成员函数指针(非静态)。 取一个...

[读书笔记] 深入探索C++对象模型-第四章-Function语义学(上)

开始整理第四章的内容,关于函数的东西。 1. 静态成员函数不可以是const的,原因是因为this指针,详细参考:http://blog.csdn.net/beyongwang/article/det...

[读书笔记] 深入探索C++对象模型-第六章-执行期语义学(下)

继续整理第六章剩下的内容,关于临时对象的几条准则。 1. 在某些情况下,编译器可以产生必要的,或者可以带来方便的临时对象,具体行为由编译器来定义。例如,对于如下操作: T a, b; T c = a ...

[读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(上)

继续整理第五章的内容,关于累的三个重要函数:构造函数,析构函数,拷贝构造函数。注:以下部分图片来自原书 1. 无继承情况下的对象构造。 当类中存在虚函数时,编译器会对该类产生膨胀作用, 例如如下类: ...

[读书笔记] 深入探索C++对象模型-第二章《构造函数语义学》(下)

继续整理第二章节剩下的内容。 1. 对于明确d

[读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(中)

继续整理第五章的内容,关于对象复制的。  对于默认的拷贝赋值操作符,在如下情况下不会表现出按位拷贝(bitwise copy:关于按位拷贝,实际就是不使用拷贝构造函数或者拷贝赋值操作符,这里的不使用是...

[读书笔记] 深入探索C++对象模型-第三章 Data语义学(中)

继续整理第三章的内容(以下部分图片来自于原书): 1. 在只有继承没有多态的情况下,子类是的内容就是父类加上子类特有的数据成员,例如,对于如下两个类,Point2d和Point3d,后者公有继承自前者...

[读书笔记] 深入探索C++对象模型-第二章《构造函数语义学》(上)

整理一下第二章的内容,共之后参考回顾。注:以下部分图片来源于原书 1. 默认构造函数会在需要的时候被编译器产生出来,要注意字眼“需要的时候”,例如如下代码: class Bat{ public: ...

[读书笔记] 深入探索C++对象模型-第四章-Function语义学(中)

继续整理第四章的内容,注:以下部分图片来自于原文 1. 单继承情况下的虚函数调用:  对于多态虚函数的调用(通过基类指针或者引用),例如ptr->z();,需要知道两个信息:     a. ptr所指...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入探索C++对象模型 读书笔记
举报原因:
原因补充:

(最多只允许输入30个字)