1. 一般說來,凡是定義有虛函式的基類,析構函式都應當定義為虛析構函式。
2. 虛析構函式的作用在於,用乙個基類指標指向乙個派生類物件時,在對基類指標執行delete時,如果基類析構函式不是虛函式,則只會呼叫基類的析構函式,而不會呼叫派生類的析構函式,會造成記憶體洩露,基類把析構函式定義成虛函式,則在呼叫派生類的析構函式後,會再呼叫基類的析構函式。當然了,如果對派生類指標執行delete,則無論基類的析構函式是不是虛函式,派生類和基類的析構函式都會被呼叫,即相當於普通的派生類物件析構。
3. 基類把乙個函式定義為虛函式後,派生類中無論加不加virtual,該函式都是虛函式。
4.如同建構函式有乙個初始化部分和乙個函式體,析構函式也有乙個函式體和乙個析構部分。在乙個建構函式中,成員的初始化是在函式體執行之前完成的,且按照它們在類**現的順序進行初始化。在乙個析構函式中,首先執行函式體,然後銷毀成員。成員按初始化順序的逆序銷毀。(c++primer p445)
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...