再谈带有虚函数的类对象之内存结构
来源:互联网 发布:淘宝客服简历自我评价 编辑:程序博客网 时间:2024/05/16 10:06
前篇:http://blog.csdn.net/pathuang68/archive/2009/04/21/4096521.aspx
下面的代码中,类Base中定义了两个虚函数vfBase_1()和vfBase_2(),另外还定义了一个整形成员变量m_base;
#include <iostream>
using namespace std;
class Base
{
public:
int m_base;
inline virtual void vfBase_1()
{
cout << "This is in Base::vfBase_1()" << endl;
}
inline virtual void vfBase_2()
{
cout << "This is in Base::vfBase_2()" << endl;
}
};
// 定义一个函数指针类型,返回值类型为void,参数类型为void
typedef void (*VFun)(void);
// 获取虚函数表中的虚函数指针,其中b为带有虚函数的类的对象的地址,i为虚函数表中虚函数的顺序
VFun virtualFunctionPointer(Base* b, int i)
{
return (VFun)(*((int*)(*(int*)b) + i));
}
int main(void)
{
Base b;
cout << "The size of Base object = /t" << sizeof(Base) << endl;
cout << endl;
int i = 0;
while(virtualFunctionPointer(&b, i)) // 对于VC++编译器,虚函数表最后一项是null
{
VFun pVF = virtualFunctionPointer(&b, i++);
pVF();
}
return 0;
}
运行结果为:
类Base的对象的memory layout如下图:
- 再谈带有虚函数的类对象之内存结构
- 再谈带有虚函数的类对象之内存结构
- 含有虚函数类的对象在内存中的结构
- JVM之内存结构
- ngnix之内存池:结构体简析 和 函数功能总览
- java虚拟机之内存结构
- C++对象模型之内存区的使用
- C++对象模型之内存区的使用
- vc之内存操作函数
- C++对象模型之内存布局三(虚继承)
- Java之内存分析和String对象、包装类
- 【Java之内存分析和String对象、包装类】Java之内存分析和String对象、包装类
- c++带有虚函数的对象的大小问题
- 通过一个结构体或者普通指针来调用一个带有虚拟函数的对象
- 探索 带有虚函数的单继承的类层次的子类对象的构造过程
- oracle体系结构三部曲之内存结构
- 结构体之内存对齐(未完)
- Oracle之内存结构(SGA、PGA)
- 2009.04.20
- J2EE 层次 模型 组件 服务
- getElementsByName须注意
- 怎样配制集群/Session复制
- c#操作Access数据库的简单例子
- 再谈带有虚函数的类对象之内存结构
- 主生产计划 MPS
- andorid 第二天 hello kitty
- 深入剖析C#继承机制
- ACE开发游戏服务器笔记
- Adobe帮助失业软件开发者 免费提供开发软件
- CodeIgniter 入门
- MPS,MRP,CRP,FRP 关系概论
- 时隔七年,重拾PHP