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