C++中虚表指针的存放位置
来源:互联网 发布:印度超级联赛直播数据 编辑:程序博客网 时间:2024/06/08 09:57
以前一直以为C++为了兼容C而把虚函数表指针Vptr放在了对象末尾,而且在《inside the C++ object model》里面也是这么描述的。但是我错了,今天愕然发现不是这样的。而且无论是在g++编译器还是在ms的编译器上都不是这样的!
#include <iostream>#include <cstdlib>using namespace std;#ifndef BYTE#define BYTE char#endif#define myMain mainclass A{private: int _a; int _b;public: A(int a=0,int b=0):_a(a),_b(b){} virtual ~A(){cout<<"A destructor"<<endl;} friend ostream &operator<<(ostream& out , const A &a){out<<a._a;return out;}};class B : public A{private: int b;public: virtual ~B(){cout<<"B destructor"<<endl;}};int myMain(int argc , char *argv[]){ A a(12,13); cout<<a<<endl; int *b=reinterpret_cast<int*>(&a); cout<<*b<<endl; b++; cout<<*b<<endl; b++; cout<<*b<<endl; system("pause"); return EXIT_SUCCESS;}
程序的输出为:
12
4463692
12
13
显然上面的为虚表指针的值,下面为成员变量的值,这说明C++中虚表指针是放在对象的开头的!!!
- C++中虚表指针的存放位置
- C语言_为什么字符串可以赋值给字符指针变量,字符串的属性及存放位置
- .Jar存放的位置
- 数据存放的位置
- 变量的存放位置
- <C/C++>指向指针的指针、指向数组的指针以及存放指针的数组
- c中的变量在内存中存放的位置
- 关于c语言不同类型变量存放位置的个人理解
- skype 的聊天记录存放位置
- Oracle11gR2 sqldeveloper 存放的位置
- chrome Extensions的存放位置
- outlook邮件存放的位置
- 修改AVD的存放位置
- jsp文件的存放位置
- JAVA 对象存放的位置
- c语音中数据类型存放位置
- C语言中变量存放位置分析
- 存放位置
- NSFileHandle
- IOS应用程序文件目录的操作
- cocox2d-x HelloWorld分析
- Object-c学习之路十二(OC的copy)
- Set接口
- C++中虚表指针的存放位置
- HDU 4620
- 解读一淘网(etao)首页响应式兼容ie6~ie8实现方法
- Direct3D 11 简介
- php错误级别
- HDU 4618
- MySQL数据库问题收集
- ZOJ 3364题解
- Direct3D 11的流水线