当前位置: 代码迷 >> 综合 >> VS2015 C++对象模型
  详细解决方案

VS2015 C++对象模型

热度:79   发布时间:2023-11-15 06:37:00.0

VS2015 C++对象内存模型

1. 抽象类

- **vfptr@this**
- int、char、string。。@this

2. 单实继承抽象类的 子类

修改父 vfptr@base内容为vfptr@mix

- < base> 内包一个base 具体如下- **vfptr@mix**- 修改为自己的 重写的虚函数; go to **derived class**::fun();- 末尾添加 自己的新虚函数- int、char、string。。@base- int、char、string。。@this

3. 单虚继承抽象类的 子类

修改父vfptr 添加自己的vfptr

- **vfptr@this**如果自己 new 一个virtual fun
- **vtbl@this**- base0- all基类ptr- int、char、string。。@this- derived from base  具体如下 - vfptr(mix)- base::fun0- base::fun1  or  go to this::fun1();- int、char、string。。。@base

4. 多重虚继承下的子类 +菱形

<地址高即可 可非连续>
- vfptr@this    如果自己 new 一个virtual fun
- vbptr@this- base- base1- base2- base3- int、char、string。。。@this- < base > 抽象类- vfptr@base or vfptr@mix- base::fun0  or go to   **derived class**::fun0- int、char、string。。。@base-  < base1> 虚继承- vfptr@base1- base1::fun1  or go to   **derived class**::fun1		- vbptr@base1- all base class of base1- int、char、string。。。@base1-  < base2> 虚继承   具体占用如下 - vfptr@base2- base2::fun2	- vbptr@base2- all base class of base2- int、char、string。。。@base2-  < base3> 实继承  内包一个modified基类 具体占用如下 - < base> 具体占用如下 - vfptr@mix- 修改为自己的 重写的虚函数- 末尾添加 自己的新虚函数- int、char、string。。@base- int、char、string。。@base3

虚继承generate vbtable
增改虚函数generate vftable

  相关解决方案