一、引入
如果通過一個基類指針申請一個派生類對象,那么在通過這個指針釋放對象的時候,要求基類的虛函數是virtual的 。
二、虛析構函數
使用方法和規則與虛函數一樣
格式要求:
虛析構函數要求基類與派生類中的名稱不一致
只要基類的析構函數是虛函數,就能確保我們在釋放指針時準確的運行哪個版本(基類or派生類)的析構函數
如果基類指針指向于自己,那么delete的時候執行的就是自己的析構函數
如果基類指針指向于派生類對象,那么delete的時候執行的就是派生類的析構函數(這個就是多態的性質,與執行虛函數的原理一樣)
如果基類的析構函數不是虛函數,則delete一個指向派生類對象的基類指針將產生未定義的行為
與虛函數一樣,如果基類的析構函數為virtual,那么派生類的析構函數也都是virtual的(即使是編譯器默認合成的也是virtual的)
三、虛析構函數的其它注意事項
①前面我們介紹過如果一個類需要析構函數,那么它同樣需要拷貝和賦值操作。但是基類的虛析構函數并不遵循這個規則:一個基類總是需要析構函數,而且它能將析構函數設定為虛函數,此時,該析構函數為了成為虛函數而令內容為空,我們顯然無法由此推斷該基類還釋放需要復制運算符或拷貝