虛析構函式與非虛析構函式問題!

2021-06-07 21:24:26 字數 405 閱讀 5759

class a

};class b:public a

};int main()

這種情況下,輸出結果我們都知道,是先執行子類的析構函式,後執行父類的析構函式,所以輸出是~b()和~a()

class a

};class b:public a

};int main()

這種情況下,我是記住了,析構函式在執行的時候,只有乙個執行,但是徹底搞混了是父類的執行還是子類的執行。現在看來需要了解一下為什麼,然後牢記住執行的時候執行的是父類的析構函式而非子類的析構函式。

由於a是個基類a型別的指標,且虛函式表中沒有對應的析構函式,所以其析構時的執行是在編譯時確定的,即只執行基類的析構函式。[另外請記住,如果呼叫子類的析構函式之後,肯定會呼叫父類的析構函式]

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...