问题原自下面一段代码:
初学C++虚函数表时,以下代码在QT和VS(版本如题)编译结果不同。
#include <iostream>
using namespace std; class Demo
{
public:
Demo()
{
cout << "Demo()" << endl;
}
virtual ~Demo()
{
cout << "~Demo()" << endl;
}
virtual void Fun1()
{
cout << "Fun1()" << endl;
}
virtual void Fun2()
{
cout << "Fun2()" << endl;
}
virtual void Fun3()
{
cout << "Fun3()" << endl;
}
}; typedef void(FUN)();
int main()
{
Demo D1; int *p = (int *)&D1; FUN * pFun = (FUN *)*((int*)*p + );
pFun(); return ;
}
程序目的是运行Demo类虚函数表第二项。
VS运行成功,QT运行失败。调试了一下,发现如下现象:
VS2015:
QT5:
可见,VS和QT编译运行方式是有差异的,区别在于QT的Demo类的虚函数表的第一第二项都是析构函数,
个人感觉不太符合C++理论常识。