亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于虛析構函數

若父類未聲明虛析構函數,這時候

父類 obj=new 子類()

delete obj//調用父類的析構,這里是找到子類的虛函數指針然后找到對應的虛函數表里面父類的析構么?


若父類聲明了虛析構,這時候

父類 obj=new 子類()

delete obj//調用子類的析構,這里是可以理解找到子類的徐函數指針,再找到虛函數表,在偏移到對應的虛析構


但是反過來理解不了第一條,求解答。



正在回答

1 回答

首先有個前提,就是如果析構函數聲明為虛函數,可以依次執行子類和父類的析構函數(這個前提好像沒有看到解釋,就當做定理吧)


若父類未聲明虛析構函數,這時候

父類 *obj=new 子類()

delete obj;

你這里生成的是父類的指針,你在delete父類這個指針的時候當然是只會調用父類的析構函數,肯定無法調用到子類的析構函數啦,因為此時根本就沒有提到子類對象。但是按照上面的前提,當你聲明析構函數為虛函數的時候,如果子類構造函數中申請了內存,就可以先調用子類析構函數,把這部分內存釋放掉

若父類聲明了虛析構,這時候

父類 *obj=new 子類()

delete obj;

同理,這里也是刪除父類指針,調用的是父類的析構函數,但是因為你聲明了虛析構函數,就會先調用子類再調用父類

子類的虛函數表里面怎么會有父類析構函數呢,就只會有子類的析構函數,除非子類沒有重寫虛析構函數,才會沿用父類的虛析構函數。但是這些跟你問的內容沒有關系。原因是上面幾行,跟虛函數指針關系不大。



0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之多態篇
  • 參與學習       66224    人
  • 解答問題       334    個

本教程將帶領大家體會面向對象三大特性中的多態特性

進入課程

關于虛析構函數

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號