今天在複習資料結構的時候,發現書上代碼中有把一個類的析構函數寫成了虛函數,查了資料後知道了原因,整理一下。
一般會把基類的析構函數寫成虛函數,是因為:在實作多态時,當用基類操作派生類,在析構時防止隻析構基類而不析構派生類的狀況發生。
這篇博文總結得很明了:http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html
當基類的析構函數不是虛函數時:
1、派生類的指針操作派生類,當析構這個派生類的指針的時候,先釋放派生類資源,在釋放基類資源。
2、基類指針操作派生類,當析構這個基類指針的時候,隻是放了基類的資源,而沒有釋放派生類的資源,造成了記憶體洩漏。
當基類的析構函數是虛函數是:
基類指針操作派生類,當析構這個基類指針的時候,先釋放派生類的資源,在調用基類的析構函數釋放基類的資源。
如果不要基類對派生類及其對象操作,則不應寫成虛函數,因為一旦寫成虛函數,編輯器就會自動給類配置設定一個虛函數表,并且給類一個指向這個虛函數表的指針,增加了額外的記憶體開銷。