天天看點

析構函數為什麼要寫成虛函數

今天在複習資料結構的時候,發現書上代碼中有把一個類的析構函數寫成了虛函數,查了資料後知道了原因,整理一下。

一般會把基類的析構函數寫成虛函數,是因為:在實作多态時,當用基類操作派生類,在析構時防止隻析構基類而不析構派生類的狀況發生。

這篇博文總結得很明了:http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html

當基類的析構函數不是虛函數時:

1、派生類的指針操作派生類,當析構這個派生類的指針的時候,先釋放派生類資源,在釋放基類資源。

2、基類指針操作派生類,當析構這個基類指針的時候,隻是放了基類的資源,而沒有釋放派生類的資源,造成了記憶體洩漏。

當基類的析構函數是虛函數是:

基類指針操作派生類,當析構這個基類指針的時候,先釋放派生類的資源,在調用基類的析構函數釋放基類的資源。

如果不要基類對派生類及其對象操作,則不應寫成虛函數,因為一旦寫成虛函數,編輯器就會自動給類配置設定一個虛函數表,并且給類一個指向這個虛函數表的指針,增加了額外的記憶體開銷。

繼續閱讀