虛析構函式是為了解決這樣的乙個問題:基類的
指標指向派生類物件,並用基類的指標刪除派生類物件。
如果某個類不包含
虛函式,那一般是表示它將不作為乙個基類來使用。當乙個類不準備作為基類使用時,使析構函式為虛一般是個壞主意。因為它會為類增加乙個
虛函式表,使得物件的體積翻倍,還有可能降低其可移植性。
所以基本的一條是:無故的宣告虛析構函式和永遠不去宣告一樣是錯誤的。實際上,很多人這樣總結:當且僅當類裡包含至少乙個虛函式的時候才去宣告虛析構函式。
抽象類是準備被用做基類的,基類必須要有乙個虛析構函式,
純虛函式會產生抽象類,所以方法很簡單:在想要成為抽象類的類裡宣告乙個純虛析構函式。
虛析構函式與非虛析構函式問題!
class a class b public a int main 這種情況下,輸出結果我們都知道,是先執行子類的析構函式,後執行父類的析構函式,所以輸出是 b 和 a class a class b public a int main 這種情況下,我是記住了,析構函式在執行的時候,只有乙個執行,但...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...