《C++对象模型》读书笔记

一、对象中member存放的顺序按照声明的顺序 

二、static 数据成员存放在数据段中(应该即为区全局区和静态存储区)

三、虚函数表初始化的时间是父类部分初始化完成后,子类部分的成员生成之前。

四、执行时,虚函数根据this指针指向的虚函数表指针指向的虚函数表中的函数执行(保障执行期多态)。

五、单一继承的话,一个对象只有一个虚函数指针,

六、虚拟继承的话,父类中定义了虚函数、子类也定义了虚函数,则存放方式类似这样(有几个类中带虚函数、就有几个虚函数指针,指向的虚函数表都是子类的虚函数表):

《C++对象模型》读书笔记

 

 

《C++对象模型》读书笔记

七、用派生类初始化基类时,虚函数表指针会重新定位指向(拷贝构造函数语义学),

八、子类虚拟继承父类,则存放方式类似这样(子类部分中有一个指针指向虚拟继承的父类):

《C++对象模型》读书笔记

九、多重继承下的虚函数,需要在执行期间调整this指针(没怎么看懂)

《C++对象模型》读书笔记

十、非虚函数的调用

我印象里,函数都会被编译器生成一个唯一的名字(比如“下划线_类名_函数名_奇奇怪怪的数字”),通过调用这个特定的名字定位所需要调用的函数。