深度探索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.菱形继承/钻石继承

这里写图片描述

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

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

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

原理同虚函数表

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值