虚函数表指针位置

一般VC和BCB是将vPtr放在类实例的前四个字节,GCC是放在末尾。在某些情况下需要考虑表指针的位置,比如序列化的时候。
其实只需将类实例的首地址与类的第一个成员变量地址相比较就可得知虚表指针的位置。
class A
{
      A(void){}
      virtual void Foo(void){}
};
 
int main()
{
     A a;
     char *p1 = reinterpret_cast<char*>(&a);
     char *p2 = reinterpret_cast<char*>(&a.n);
     if(p1 == p2)
     {
        cout<<"vPtr is in the end of class instance!"<<endl;
     }else
     {
        cout<<"vPtr is in the head of class instance!"<<endl;
     }
     return 1;
} 

 

你可能感兴趣的:(虚函数)