派生類的析構(gòu)函數(shù)什么情況下會被調(diào)用?
為什么基類的析構(gòu)函數(shù)不為虛的話,基類指針指向子類對象,刪除對象時,派生類的析構(gòu)函數(shù)就不會被調(diào)用?
我看到的解釋就是如果基類析構(gòu)函數(shù)不是虛函數(shù),Base *d = new Derived(); 這樣定義的d在析構(gòu)的時候只會調(diào)用Base自己的析構(gòu)函數(shù),delete d; 運(yùn)行的時候,Derived自己的數(shù)據(jù)成員不會被銷毀,造成內(nèi)存泄漏。?
這是為什么呢?為什么可以調(diào)用子類的構(gòu)造函數(shù)卻不能調(diào)用子類的析構(gòu)函數(shù),這種規(guī)則不理解,析構(gòu)函數(shù)到底在什么情況下才一定會被調(diào)用?
2016-08-06
計(jì)算機(jī)規(guī)定是這樣執(zhí)行的,定義子類會自動實(shí)例化父類,刪除子類會把因?yàn)閷?shí)例化子類而實(shí)例化的父類刪除,相反刪除父類不會刪除子類,如果要刪除需要用虛析構(gòu)函數(shù)