在C++中浴鸿,如果一個(gè)類(lèi)是作為父類(lèi)存在時(shí)虐译,那么析構(gòu)函數(shù)必須是虛析構(gòu)函數(shù)狰挡,否則在對(duì)其子類(lèi)進(jìn)行析構(gòu)時(shí),只會(huì)釋放其父類(lèi)的成分淑仆,對(duì)子類(lèi)的成分置之不理
原來(lái)一直以為在沒(méi)有顯示的定義析構(gòu)函數(shù)的情況下涝婉,編譯器會(huì)自動(dòng)生成虛析構(gòu)函數(shù)進(jìn)行優(yōu)化,但是通過(guò)今天的作業(yè)卻發(fā)現(xiàn)不是這么一回事蔗怠。
眾所周知嘁圈,存在虛函數(shù)的類(lèi)計(jì)算大小的時(shí)候必然要計(jì)算其虛表指針的大小省骂,即使是一個(gè)虛基類(lèi),同樣也會(huì)有大小最住,這就是因?yàn)樘摫碇羔樀拇嬖凇?br>
但是在今天的作業(yè)中钞澳,筆者嘗試著將父類(lèi)的虛函數(shù)注釋掉,然后發(fā)現(xiàn)父類(lèi)不再存在虛表指針了涨缚。
這是一個(gè)值得警惕的情況轧粟,編譯器雖然有時(shí)候會(huì)對(duì)代碼進(jìn)行優(yōu)化,但還是得becare