1. 程式人生 > >虛函數表:QT5與VS2015的差異

虛函數表:QT5與VS2015的差異

name bubuko 現象 type src 結果 問題 理論 常識

問題原自下面一段代碼:

初學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的差異