C 虛析構函式

2021-07-22 06:31:43 字數 1007 閱讀 2310

用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 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...