《深度探索c++对象模型》笔记总结(一)

首先先明确一个宗旨及两个概念:

宗旨:C++在布局及存取时间上主要的额外负担是由virtual引起的

1.虚函数:C++多态的基本实现,没什么好说的,详细见如下打包笔记:虚函数

2.虚基类:用来处理菱形继承时候,在派生类中数据有重复的问题,见笔记:虚基类

------------------------------------------------------------------------------------------------------------------------------

接下去引入正题

三种对象模式

  • 简单对象模式

这个没什么好说的,在object中存储的是地址(指针),按序指向每个声明的函数或者数据。

此时一个class object的大小计算:指针大小*class中声明的member个数

  • 表格驱动的对象模型

和上面不同的是:此时我将数据和函数进行分开,同样在object中存的还是指针,一个指向data成员,一个指向function。但是在这里一点需要注意:在Member Data Table中存的是实际的数据元素;Function Member Table中存的仍然是函数的地址

  • C++对象模型

此时需要特别关注了,因为这里引出了一个C++中非常重要的概念:虚函数表(过段时间总结完后把这个链接加上)

此时先注意一点,只有nonstatic data member是存在object内部的,其余全部存在外部,并且对于virtual的函数,两个步骤重要:

1.每个class产生一堆指向virtual functions的指针,并且放在表格之中(虚表)

2。每个class object被安插一个指针,指向相关的virtual table。称为vptr。每一个class所关联的type_info_object(用以支持RTTI)放在表格的第一个位置

猜你喜欢

转载自blog.csdn.net/qq_26896213/article/details/85246293