现在的位置: 首页 > 综合 > 正文

c++内存布局浅探(二)

2014年01月07日 ⁄ 综合 ⁄ 共 1082字 ⁄ 字号 评论关闭

该文为http://blog.csdn.net/webScaler/archive/2011/04/05/6302997.aspx的续篇

 

若对虚继承不是很了解,可以先参考下文

http://lingxiaoyequ.blog.163.com/blog/static/21639050200941941730984/

 

 

4
单虚继承

 

 测试代码:


 


虚继承中多了一个
vbptr
指向一个
vbtbl
,里面存的是虚基类的偏移量,
vbtbl
第一项为该
vbptr
到该对象中该类部分首地址的偏移量,因为
vbptr
一般都在
vptr
下面,所以一般都是
-4
,表示成十六进制就是
0XFF FF FF FC; vbtbl
第二项为该类的第一个虚基类相对于
vbptr
的偏移量,本例中为
8

 

虚继承中派生类和父类不再共用一个
vptr
,而是各自都有一个
vptr
,但是都是指向派生类的
vtbl
,只是偏移量不一样。

 

 

5
多虚继承

 

测试代码


 

这种情况是单虚继承的复杂版,没什么变化点,只是量变多了而已。

 

 

 

6
菱形虚继承

 

测试代码


 

 

这个最复杂:

 

1>Base1

Derived
共用了一个
vptr
,其他每个都有一个
vptr
,指向的是派生类的不同位置;

2>
每个虚继承自
Base
类的类都具有一个
vbptr
和一个
vbtbl

抱歉!评论已关闭.