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