下载此文档

虚函数表指针的位置.doc


文档分类:IT计算机 | 页数:约2页 举报非法文档有奖
1/2
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/2 下载此文档
文档列表 文档介绍
虚函数表指针的位置
分类: C++/STL 2009-02-18 14:21591人阅读评论(1)收藏举报
  XX软件公司的笔试题:
  C++标准中,虚表指针在类的内存结构位置没有规定,不同编译器的实现可能是不一样的。请实现一段代码,判断当前编译器把虚表指针放在类的内存结构的最前面还是最后面。
  当时的解答是:
#include <iostream>
using namespace std;
typedef unsigned (*Fun)(void);
class Base
{
public:
Base(void){}
virtual unsigned foo(void)
{
cout<<"Construct Base"<<endl;
return 1;
}
public:
virtual ~Base(){}
};
class Derive : public Base
{
public:
Derive(void){}
virtual unsigned foo(void)
{
cout<<"Construct Derive"<<endl;
return 1;
}
};
bool VtlInPre() /*判断虚表指针是否在类结构的前面,是,返回真*/
{
Derive dr;
int** pVtl = (int**)&dr;
Fun pFun = NULL;
pFun = (Fun)pVtl[0][0];
unsigned ret = 0;
ret = pFun();
return (ret == 1) ? true : false;
}
//test
int main()
{
bool tmp = false;
tmp = VtlInPre();
if(tmp)
{
cout<<"the pointer of vitrual table is in HEAD of class"<<endl;
}else
{
cout<<"the pointer of vitrual table is in END of class"<<endl;
}
return 1;
}
  一般VC和BCB是将vPtr放在类实例的前四个字节,GCC是放在末尾。在某些情况下需要考虑表指针的位置,比如序列化的时

虚函数表指针的位置 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数2
  • 收藏数0 收藏
  • 顶次数0
  • 上传人1542605778
  • 文件大小16 KB
  • 时间2021-11-18
最近更新