首页 > 代码库 > 深度探索C++对象模型的读书心得

深度探索C++对象模型的读书心得

参考:深度探索C++对象模型 (stanley B.Lippman著 侯捷翻译)

1. Page9 : C++对象模型,说明每一个类仅有一个虚函数表Vtbl,而类的每一个对象都有指向其表的指针。

2. Page30:引用也需要与一个指针(大小为4BYTE)相同的空间。

3. Page28: 指针类型会教导编译器如何解释某个特定地址中的内存内容及大小。

4. Page39: explicit关键字能够制止“单一参数的constructor被当做一个Conversion运算符”

5. Page42: 被合成的default constructor只满足编译器的需要,而不是程序的需要。

6. Page53: 当一个类不展现bitwiste copy semantics(位逐次拷贝)需要编译器合成一个。

7. Page74:NRV(Name return value)也即是函数有返回值,其可以用在参数列表中多加一个参数来进行优化。

8. Page88:即使一个类class没有任何object实体,其static data memebers也已经存在。

9. Page92:只有含有virtual函数的类的对象,才有vptr指针。

10.Page95:每一个member的存取许可(private/public/protected),以及与class的关联,并不会导致任何空间上或执行时间上的额外负担------不论是在个别

的class objects或是在static data member本身。

11.Page97: name-mangling名字改编,名字重整

12.Page102:C++语言保证”出现在derived class中的base class subobject有其完整原样性“。

13.Page113:多重继承的问题主要发生于derived class objects和其第二或后继的base class objects之间的转换。

14.Page145:如果声明extern ”c” 会压抑non member fuction的“mangling”效果。

15.Page153:在C++中,多态表示“以一个public base class的指针(或引用)寻址出一个derived class object”的意思。

16.Page164:在多重继承之下,一个derived class内含n-1个额外的virtual tables(也就是其共有n个虚表),n表示其上一层的base classes的数目,因此

单一继承将不会有额外的virtual tables。


在学习C++对象模型的时候,我们主要学习编译器在背后为我们做了什么?如何做的?为什么这么做?(其主要还是为了时间、空间的效率以及与C的兼容性来考虑的)。