C++-----深度探索对象模型-第三章-Data语意学(一)

1、一个空的class,sizeof的大小是1,这是因为编译器为每一个空类安插一个char,使得这一个class的两个对象得以在内存中配置是独一无二的。

2、class的大小和以下三个因素有关:

    1)语言本身所造成的额外负担。当语言支持虚基类时,会导致一些额外负担,在派生类中,这个额外的负担反应在某个形式的指针上,一般就是虚函数指针,或者是一个徐基类对象。

    2)编译器对特殊情况所提供的优化处理,某些编译器会对空虚基类进行特殊处理。

    3)补齐机制。聚合的结构体大小会受到alinment的限制。

3、某些编译器对空虚基类做了特殊处理,空虚基类被视为派生类对象最开头的部分,也就是说其没有占据任何额外空间,这样就节省了一个字节。也就是少了安插的char。

4、编译器之间的潜在差异正说明了C++对象模型的演化。

5、一个虚基类对象只会在派生类中存在一份实例,不管它在继承体系中出现多少次。

6、static data member放置的是整个class感兴趣的数据。

7、不管一个类产生了多少个对象,static data member永远只存在一份实例。即使没有类对象产生。但是一个模板类的static data member的行为稍有不同。

8、在早期的C++编译器中,为了正确的数据绑定,通常会有两种防御性程序设计风格。

    1)把所有的数据成员放在class声明起头处。

    2)把所有的inline functions,不管大小放在class声明之外。

9、对于成员函数本体的分析,会在整个class的声明都出现了才开始。因此在一个inline member funciton躯体内的数据成员绑定操作会在整个class声明完成之后才会发生。

10、请将所有的内置类型都放置在class的开始处,因为可能仍需要这种防御的风格。

posted @ 2019-05-21 16:02  吾之求索  阅读(97)  评论(0)    收藏  举报