强转指针导致虚函数表丢失?
百度了很多关于虚函数表的文章,都讲解了虚函数表的原理,看得一知半解,目前没法解决我遇到的问题:
程序代码:
#include <string>
#include <iostream>
using namespace std;
struct A
{
virtual void FunA() = 0;
};
struct C : public A
{
C():num(1000){}
virtual void FunA()
{
cout<<"FunA:"<<num*num<<endl;
}
long num;
};
int _tmain(int argc, _TCHAR* argv[])
{
C* c = new C;
A* a;
void* p = c;
a = (A*)p;
a->FunA();
delete c;
return 0;
}
打印的时候开起来没有任何错误,不过调试就会发现虚表是错误的。我最困惑的地方是:
1、有时候这样转换是没有问题的,有时候就会出问题。
2、虚表到底是保存在什么位置?为什么转成别的类型指针后虚表会丢失?










其实我正是遇到与那个帖子相同的问题,最初遇到问题的时候就是在多继承的时候,后来去试了一下,并非只有在多继承的时候才会发生。
