虛析構函式

2021-09-01 06:36:11 字數 381 閱讀 3976

只能用new 派生類去例項基類,而不能用new基類去例項派生類

derive *bp1 = new base();  //錯

base *bp1 = new derive(); //對

在delete bp1時,如果析構函式時虛函式,則會先呼叫派生類的析構函式,然後呼叫基類的析構函式。如果不是,則僅僅只呼叫基類的析構函式。

引入虛函式後,因為基類物件的指標可以指向派生類的物件(多型性),所以如果刪除指標delete p,那麼就會呼叫派生類得析構函式,但是派生類的析構函式就會呼叫基類的析構函式,這樣整個派生類的物件完全被釋放。但是如果不被宣告成虛函式,那麼刪除指標時,只會呼叫基類的析構函式,而不會呼叫派生類的析構函式,這樣釋放物件就只釋放不完全,所以把析構函式定義成虛函式是十分必要的。

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

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

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

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

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

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