首页 > 代码库 > 深度探索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的兼容性来考虑的)。