对象内存布局 (6)
来源:互联网 发布:mysql decimal 加法 编辑:程序博客网 时间:2024/05/02 03:04
前篇:http://blog.csdn.net/pathuang68/archive/2009/04/23/4101999.aspx
如果在对象内存布局 (5)的代码中,将Base1中的两个虚函数声明删除,同时将main函数中的下面代码注释掉(因为现在只有两张虚函数表了):
cout << "3rd virtual function table: " << endl;
i = 0;
tmp = ((int*)&d) + 4;
while(virtualFunctionPointer(tmp, i))
{
VFun pVF = virtualFunctionPointer(tmp, i++);
pVF();
}
其他代码不变,运行结果如下:
Derived对象的memory layout图解如下:
由上面分析可知:
其一,Base1 subobject排列在Base2 subobject和Base3 subobject之后,尽管它在Derived类的继承列表中排列在首位,因为它已经没有虚函数表了,但仍然排列在Derived类的成员变量m_derived之前。
其二,在Derived类中定义的虚函数Derived::vfDerived()附加在一个虚函数表的最后,这时第一张虚函数表是类Base2的。
后篇:http://blog.csdn.net/pathuang68/archive/2009/04/23/4102003.aspx
- 对象内存布局 (6)
- 对象内存布局 (6)
- 对象内存布局 (6)
- C++内存对象布局
- c++对象,内存布局
- c++对象内存布局
- 对象内存布局 (1)
- 对象内存布局 (2)
- 对象内存布局 (3)
- 对象内存布局 (4)
- 对象内存布局 (5)
- 对象内存布局 (7)
- 对象内存布局 (8)
- 对象内存布局 (9)
- 对象内存布局 (10)
- 对象内存布局 (11)
- 对象内存布局 (12)
- 对象内存布局 (13)
- 做我女朋友,好吗?
- 关于Java中类加载时对其属性和代码块初始化顺序的研究与测试
- Strust2 I18N 国际化
- 对象内存布局 (5)
- 怀念穆大叔
- 对象内存布局 (6)
- 对象内存布局 (7)
- JavaScript中如何选中下拉框的文本
- 对象内存布局 (8)
- minimal number of exchange operations (file)
- 珍惜友谊
- 又见调试派
- string to number code in C++ template
- Open Device(Hard Drive, CD/DVD) or a device from its mount point