对象内存布局 (1)
来源:互联网 发布:网络卖竹鼠什么意思 编辑:程序博客网 时间:2024/06/03 14:45
内容概要:
满足下面2个条件时,
1. 父类有虚函数,子类无虚函数(即无虚函数重写或无虚函数覆盖)
2. 非虚继承
类对象之内存布局
前述相关内容参考:
1. http://blog.csdn.net/pathuang68/archive/2009/04/20/4096088.aspx
2. http://blog.csdn.net/pathuang68/archive/2009/04/21/4096429.aspx
3. http://blog.csdn.net/pathuang68/archive/2009/04/21/4096521.aspx
Base类中有两个虚函数vfBase_1()、vfBase_2()和一个整形成员变量m_base, Derived类中有一个整形成员变量m_derived,二者的关系如下:
代码如下:
#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;
}
};
class Derived : public Base
{
public:
int m_derived;
};
typedef void (*VFun)(void);
// 改为template形式,因为不能确定传进来的参数是Base类型的指针还是Derived类型的指针
template<typename T>
VFun virtualFunctionPointer(T* b, int i)
{
return (VFun)(*((int*)(*(int*)b) + i));
}
int main(void)
{
Derived d;
cout << "The size of Base object = /t" << sizeof(Derived) << endl;
cout << endl;
int i = 0;
while(virtualFunctionPointer(&d, i))
{
VFun pVF = virtualFunctionPointer(&d, i++);
pVF();
}
return 0;
}
运行结果如下:
Derived对象的memory layout图解如下:
- 对象内存布局 (1)
- 对象内存布局 (1)
- 对象内存布局 (1)
- 对象内存布局 (1)
- C++对象内存布局(1)
- C++内存对象布局
- c++对象,内存布局
- c++对象内存布局
- 对象内存布局 (2)
- 对象内存布局 (3)
- 对象内存布局 (4)
- 对象内存布局 (5)
- 对象内存布局 (6)
- 对象内存布局 (7)
- 对象内存布局 (8)
- 对象内存布局 (9)
- 对象内存布局 (10)
- 对象内存布局 (11)
- 批量导入数据到数据库
- 无论做什么事情,对人而言,两个重要的因素是造成我们学习的原动力
- hdu 1281 棋盘游戏 最大匹配(经典题)
- UVA 11137
- android:layout_margin和android:padding属性讲解
- 对象内存布局 (1)
- iOS笔记-----关于回调函数——Delegate的那些事
- Linux vi 编辑器介绍(三)——插入模式
- 1、Spring3核心技术-IoC(一)
- qp步进测试统计
- SQLSERVER备份和还原
- linux定时任务的设置
- OpenStack Nova 扩展数据库
- 各个字节顺序