虚函数表:QT5与VS2015的差异
Posted kuniioop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚函数表:QT5与VS2015的差异相关的知识,希望对你有一定的参考价值。
问题原自下面一段代码:
初学C++虚函数表时,以下代码在QT和VS(版本如题)编译结果不同。
1 #include <iostream> 2 using namespace std; 3 4 5 class Demo 6 { 7 public: 8 Demo() 9 { 10 cout << "Demo()" << endl; 11 } 12 virtual ~Demo() 13 { 14 cout << "~Demo()" << endl; 15 } 16 virtual void Fun1() 17 { 18 cout << "Fun1()" << endl; 19 } 20 virtual void Fun2() 21 { 22 cout << "Fun2()" << endl; 23 } 24 virtual void Fun3() 25 { 26 cout << "Fun3()" << endl; 27 } 28 }; 29 30 typedef void(FUN)(); 31 int main() 32 { 33 Demo D1; 34 35 int *p = (int *)&D1; 36 37 FUN * pFun = (FUN *)*((int*)*p + 1); 38 pFun(); 39 40 return 0; 41 }
程序目的是运行Demo类虚函数表第二项。
VS运行成功,QT运行失败。调试了一下,发现如下现象:
VS2015:
QT5:
可见,VS和QT编译运行方式是有差异的,区别在于QT的Demo类的虚函数表的第一第二项都是析构函数,
个人感觉不太符合C++理论常识。
以上是关于虚函数表:QT5与VS2015的差异的主要内容,如果未能解决你的问题,请参考以下文章