[读书笔记]深度探索C++模型_第一章_关于对象
现在仍占有优势的C++对象模型,Nonstatic data members,被配置于每一个class object之内,static data menbers则被存放在个别的class object之外。Static 和 nonstatic function members 也被放在个别的 class object 之外。
需要多少内存才能够表现一个class object?一般而言
- 其nonstatic data members 的总和大小。
- 加上任何由于alignment(alignment就是将数值调整到某数的倍数)的需求而填补上去的空间。(32、64位整数倍)
- 加上为了支持virtual而由内部产生的任何额外负担(overhead)。虚函数指针,如果继承有多个虚函数,就会有多个虚函数指针。
额外来说:空类的实例是1字节(如果是0的话,空类的数组就无法表示了)。有虚函数sizeof(ptr)是8字节(在64位系统上,就是一个指针的大小)
关键词的困扰:
先声明,用class,如果你不用C的话。
C struct 在 C++ 中的一个合理的用途,是当你要传递“一个复杂的class object的全部或部分”到某个C函数去时,struct声明可以将数据封装起来,并保证拥有与之兼容的空间布局。