C++析构函数要求加virtual构造不能加
1 #include "iostream" 2 #include <stdio.h> 3 #include <windows.h> 4 #include <process.h> 5 6 using namespace std; 7 8 9 class A 10 { 11 public: 12 A(); 13 virtual ~ A(); 14 15 private: 16 17 }; 18 19 A:: A() 20 { 21 cout << "A()" << endl; 22 } 23 24 A::~ A() 25 { 26 cout << "~A()" << endl; 27 } 28 29 class B:public A 30 { 31 public: 32 B(); 33 ~B(); 34 35 private: 36 37 }; 38 39 B::B() 40 { 41 cout << "B()" << endl; 42 } 43 44 B::~B() 45 { 46 cout << "~B()" << endl; 47 } 48 49 50 int main() 51 { 52 A* p = new B(); 53 delete p; 54 p = NULL; 55 return 0; 56 }
A析构添加了virtual

不添加

结论:
1、如果是普通对象(B b),加不加virtual都会先析构B,再析构A。
2、如果是指针(A* p = new B,delete p),加上virtual才会先先析构B,再析构A。不然只会调用基类的析构函数。

浙公网安备 33010602011771号