c++之虛析構函數

1。虛析構函數:ios

  構造函數不能是虛函數。創建一個派生類對象時,必須從類

      層次的根開始,沿着繼承路徑逐個調用基類的構造函數函數

  析構函數能夠是虛的。虛析構函數用於指引 delete 運算符正

      確析構動態對象 spa

2. 定義了基類虛析構函數,基類指針指向的

    派生類動態對象也能夠正確地用delete析構設計

3 設計類層次結構時,提供一個虛析構函數,

     可以使派生類對象在不一樣狀態下正確調用指針

     析構函數code

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     //virtual ~A()    //定義析構函數爲虛析構函數時,使用基類真正引用派生類對象後,正確的調用了派生類的析構函數,釋放了全部資源
 8     ~A()
 9     {
10         cout << "A::~A() is called!\n";
11     }
12 };
13 class B:public A
14 {
15 public: 
16     ~B()
17     {
18         cout << "B:~B() is called!\n";
19     }
20 };
21 void main()
22 {
23     //用基類指針創建派生類的動態對象
24     A *a = new B();
25     //用派生類指針創建派生類的動態對象
26     B *b = new B();
27     cout << "delete first object:\n";
28     //析構有基類創建的派生類對象,沒有調用派生的析構函數
29     delete a;
30     cout << "delete secod object:\n";
31     //析構有派生類創建的派生類對象,正確的調用了派生類的析構函數
32     delete b;
33 }
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     //virtual ~A()    //定義析構函數爲虛析構函數時,使用基類真正引用派生類對象後,正確的調用了派生類的析構函數,釋放了全部資源
 8     ~A()
 9     {
10         cout << "A::~A() is called!\n";
11     }
12 };
13 class B:public A
14 {
15 public: 
16     ~B()
17     {
18         cout << "B:~B() is called!\n";
19     }
20 };
21 void main()
22 {
23     //用基類指針創建派生類的動態對象
24     A *a = new B();
25     //用派生類指針創建派生類的動態對象
26     B *b = new B();
27     cout << "delete first object:\n";
28     //析構有基類創建的派生類對象,沒有調用派生的析構函數
29     delete a;
30     cout << "delete secod object:\n";
31     //析構有派生類創建的派生類對象,正確的調用了派生類的析構函數
32     delete b;
33 }
相關文章
相關標籤/搜索