深度探索c++对象模型读书笔记(一)

深度探索c++对象模型读书笔记(一)

1.c++有两种class data menmbers:static 和 nonstatic 三种class menmber functions:static ,nonstatic,virtual

2.简单对象模型 每一个member data和member function都由一个指针指向它对象中只存放指针

3.表格驱动的对象模型

class A{
  void* member data table ptr;//point to member table
  void* memebr function table ptr;//point to member function table
};

这是类的构成

member data table
{
  member 1;
  member 2;
  member 3;
  ......
}
member function table
{
  void* functions ptr 1;//point to function 1
  void* functions ptr 2;
  void* functions ptr 3;
  ......
}

注意:简单对象模型和表格驱动模型都没有实际应用到真正的c++编译器上,但是表格驱动的对象模型里member function table的观念成为支持virtual functions的方案

4.c++对象模型

class A{
  void* vptr;//point to virtual function table
  member data:
    ...
    ...
    ...
};
virtual function table
{
  void* virtual function 1;
  void* virtual function 1;
  void* virtual function 1;
}

虚函数调用都是根据虚表指针指向的虚函数表来找到虚函数的

如果是普通成员函数,是静态绑定,在编译时会通过this指针找到调用该函数的对象或者指针

5.菱形继承/钻石继承

深度探索c++对象模型读书笔记(一)_第1张图片

如果不知道的可以自行百度了解

在这种继承中为了保证D类中只存在一个Base实例会使用虚继承

此时会生成一个base class ptr指向base class table

原理同虚函数表

6.处于一个access section的数据,必定按照声明出现的 顺序出现在内存中但是不同access section不一定

你可能感兴趣的:(读书笔记)