C++中的涉及到虚表时,类对象的布局分为:虚表与数据成员,子类包含派生类布局,假设下面一个程序:

 #include <iostream>

 using namespace std;

 class B {
private:
int a;
public:
B() {
a = ;
} virtual void fun() {
cout << "B::fun" << endl;
}
}; class A:public B {
public:
A() {
cout << "class A constructor" << endl;
m = ;
n = ;
} ~A() {
cout << "~A()" << endl;
}
virtual void fun() {
cout << "A::fun" << endl;
} private:
int m,n;
}; int main(int argc, char *argv[])
{
A a;
int *p;
int **pvtr = (int **)&a; typedef void (*pf_t)(); pf_t pf;
p = static_cast<int *>((int *)&a); pf = (pf_t)(pvtr[][]);
pf();
//cout << "*pf:" << *pf << ",pf:" << pf << endl; //(*(*pf+sizeof(void*) * 2))(); cout << "p:" << *p << endl;
p ++ ;
cout << "p:" << *p << endl;
p++;
cout << "p:" << *p << endl;
p++;
cout << "p:" << *p << endl; p++;
cout << "p:" << *p << endl; return ;
}

通过VS 2010显示对象布局图(cl -d1reportAllClassLayout),其中meta为对应对象的类型信息:

类B:

 class B    size():
+---
| {vfptr}
| a
+--- B::$vftable@:
| &B_meta
|
| &B::fun

类A:

class A    size():
+---
| +--- (base class B)
| | {vfptr}
| | a
| +---
| m
| n
+--- A::$vftable@:
| &A_meta
|
| &A::fun A::fun this adjustor:

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
  2. 我的EF功能
  3. InventSumDelta表的作用
  4. 对抗静态分析——so文件的加密
  5. 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  6. Jmeter java.lang.OutOfMemoryError: GC overhead limit exceeded
  7. Android 中使用自定义字体的方法
  8. 35、Android 性能优化、内存优化
  9. chgrp、chown、chmod命令
  10. (转)Android中截取当前屏幕图片
  11. 用SQL实现统计报表中的&quot;小计&quot;与&quot;合计&quot;的方法详解
  12. LightOJ DNA Prefix(字典树+dfs)
  13. XML 处理利器 : XStream
  14. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合
  15. python 支付宝SDK
  16. 第1章 Linux文件类基础命令
  17. nodemailer + express + h5 拖拽文件上传 实现发送邮件
  18. 关于MySQL慢日志,你想知道的都在这
  19. WindowsErrorCode
  20. 测试 多线程 实现 callable 带返回值

热门文章

  1. WP8没有开发者账号升级GDR3预览版的方法
  2. 3. Swift 数组|字典|集合
  3. 关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法
  4. c# 与java之间的简单区别
  5. Sprint(第六天11.19)
  6. OSG开发概览
  7. 当一个类、一个实例域、方法被定义为private、public 时意味着什么
  8. 【hdu4366】dfs序线段树
  9. 使用Eclipse创建maven项目
  10. 如何让linux定时任务crontab按秒执行