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。不然只会调用基类的析构函数。

posted @ 2016-03-18 15:11  何人之名  阅读(338)  评论(0)    收藏  举报