程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++的虛析構詳解及實例代碼

C++的虛析構詳解及實例代碼

編輯:關於C++

C++的虛析構詳解及實例代碼。本站提示廣大學習愛好者:(C++的虛析構詳解及實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C++的虛析構詳解及實例代碼正文


C++的虛析構詳解及實例代碼

投稿:lqh

這篇文章主要介紹了C++的虛析構詳解及實例代碼的相關資料,需要的朋友可以參考下

C++的虛析構

  最近准備復習一遍所有的知識點,先從基礎開始做起,用幾分鐘寫個繼承和析構吧。

  父類為A,子類為B,代碼如下:

class A
{
 public:
 A()
 {
   cout << "構造A"<< endl; 
 }
 ~A()
 {
  cout << "析構A" << endl;
  }
}
class B:public A
{
 public:
 B()
 {
 cout << "構造B"<< endl; 
 }
 ~B()
 {
 cout << "析構B"<< endl;
 }

}

這個時候在main函數裡,

定義一個A的對象,A a;運行輸出結果為:構造A 析構A。

定義一個B的對象, B b;運行的輸出結果為:構造B 析構B。

定義一個A的指針,指向B。A *P = new b; 運行輸出結果為:構造A 構造B.這個時候很多人就容易出問題了,為啥沒調用析構呢,這個也是經常遇到的問題,最簡單也是最容易遺忘的。new出來的對象沒有刪,還有寫一行代碼 delete p;這個時候的運行輸出結果為:構造A 構造B 析構A。又出現問題了,B的析構怎麼沒走,這個時候需要一用虛析構這個概念,虛析構的功能:父類的析構寫成虛析構,在刪除父類的指針的時候,可以刪除子類的對象,避免內存洩漏。

具體操作就是把上面代碼的第八行,前面加一個virtual。這個時候再運行輸出結果為:構造A 構造B 析構B 析構A。注意這裡也可以看出調用順序,先走父類的構造,然後子類的構造。先走子類的析構,最後走父類的析構。 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved