c 虛析構函式

2021-07-12 01:02:28 字數 575 閱讀 8219

虛析構函式

析構函式的工作方式是:最底層的派生類(most derived class)的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。

因為在c++中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然而,基類部分很可能已被銷毀,這就導致了乙個古怪的「部分析構」物件,這是乙個洩漏資源。排除這個問題非常簡單:給基類乙個虛析構函式。於是,刪除乙個派生類物件的時候就有了你所期望的正確行為。將銷毀整個物件,包括全部的派生類部分。

但是,一般如果不做基類的類的析構函式一般不宣告為虛函式,因為虛函式的實現要求物件攜帶額外的資訊,這些資訊用於在執行時確定該物件應該呼叫哪乙個虛函式。典型情況下,這一資訊具有一種被稱為 vptr(virtual table pointer,虛函式表指標)的指標的形式。vptr 指向乙個被稱為 vtbl(virtual table,虛函式表)的函式指標陣列,每乙個包含虛函式的類都關聯到 vtbl。當乙個物件呼叫了虛函式,實際的被呼叫函式通過下面的步驟確定:找到物件的 vptr 指向的 vtbl,然後在 vtbl 中尋找合適的函式指標。這樣子會使類所占用的記憶體增加。

C 析構函式 虛析構函式

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

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

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

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

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