国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 14:08:46
字體:
來源:轉載
供稿:網友

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。注意這里也可以看出調用順序,先走父類的構造,然后子類的構造。先走子類的析構,最后走父類的析構。 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇左市| 南华县| 个旧市| 三门峡市| 宣武区| 绥阳县| 宁晋县| 安远县| 秭归县| 宁化县| 遂宁市| 庆云县| 德格县| 平安县| 柳林县| 鄂伦春自治旗| 唐海县| 白城市| 阳曲县| 东丰县| 巨鹿县| 珠海市| 高安市| 平潭县| 且末县| 拜城县| 丰顺县| 凤翔县| 苍溪县| 林芝县| 巴林右旗| 黑水县| 吉隆县| 阳泉市| 青州市| 蛟河市| 临沧市| 龙井市| 闸北区| 钟祥市| 勐海县|