關于C++中的虛析構函數
時間:2017-01-05作者:華(hua)清遠見
《effective C++》中的條款14:確(que)定基類(lei)有虛析構函數。也就(jiu)是說,如果某個類(lei)要作為(wei)基類(lei)來使用,一(yi)般使用虛析構函數。看下面(mian)的例(li)子:
class A{
class B: public A 測試: A *p = new B; delete p; 代(dai)碼的(de)輸出(chu)結(jie)果: ~A() 我(wo)們發(fa)現B類的析構函數沒有(you)調用,導致內存(cun)泄露(lu)。(因為動態編(bian)譯(yi),在運行時會檢查(cha)有(you)無派生類對(dui)象重(zhong)載本函數,有(you)則調用之。) 當我們可能通過(guo)基類指針(zhen)刪(shan)除派(pai)生類對象(xiang)(xiang)時,并(bing)且被析構的(de)對象(xiang)(xiang)是有重要(yao)(yao)的(de)析構函數的(de)派(pai)生類的(de)對象(xiang)(xiang),就需要(yao)(yao)讓基類的(de)析構函數成為虛擬的(de)。 當一個類(lei)不準(zhun)備作為基類(lei)使(shi)用(yong)時,使(shi)析構(gou)函(han)(han)數為虛(xu)(xu)函(han)(han)數一般是個壞主意。因為當類(lei)里面有虛(xu)(xu)函(han)(han)數的時候(hou),編(bian)譯(yi)器會(hui)給類(lei)添加一個虛(xu)(xu)函(han)(han)數表,里面來(lai)存(cun)放虛(xu)(xu)函(han)(han)數指針(zhen),這樣就會(hui)增加類(lei)的存(cun)儲空間。所以,只有類(lei)要作為基類(lei)來(lai)使(shi)用(yong)時,才(cai)把(ba)析構(gou)函(han)(han)數寫成(cheng)虛(xu)(xu)函(han)(han)數。
相關資訊
發表評論
|