强转指针导致虚函数表丢失?
百度了很多关于虚函数表的文章,都讲解了虚函数表的原理,看得一知半解,目前没法解决我遇到的问题:程序代码:
#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、虚表到底是保存在什么位置?为什么转成别的类型指针后虚表会丢失?