用c++開發的時候,用來做基類的類的析構函式一般都是虛函式。下面來看乙個例項:這樣做是為了當用乙個基類的指標刪除乙個派生類的物件時,派生類的析構函式會被呼叫,如果析構函式不是虛擬的,則將只呼叫對應於指標型別的析構函式。當然,並不是要把所有類的析構函式都寫成虛函式。因為當類裡面有虛函式的時候,編譯器會給類新增乙個虛函式表,裡面來存放虛函式指標,這樣就會增加類的儲存空間。所以,只有當乙個類被用來作為基類的時候,才把析構函式寫成虛函式。
父類dad.cpp:
#include using namespace std;
class dad
~dad()
void sayname()
{cout<<"i am son"《執行結果:
dad's destructor
--------------------------------
process exited after 0.009591 seconds with return value 0
請按任意鍵繼續. . .
可以發現如果不用虛析構函式時,用父類指標進行delete時,子類的析構函式並不會被執行,但這裡實際new的是子類物件,所以就會造成了記憶體洩露的隱患。
當然如果物件指標和new出來的空間都是同個類物件的:
son *obj1 = new son();
則子類和父類的析構函式都會呼叫,執行結果為:
son's destructor
dad's destructor
--------------------------------
process exited after 0.009003 seconds with return value 0
請按任意鍵繼續. . .
所以,c++程式設計中,如果寫的某個類是作為基類存在的話,應將其析構函式定義成virtual的。 C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...