C 虛擬析構函式

2021-06-06 18:56:20 字數 432 閱讀 9827

c++ primer:如果所寫的類要充當基類,那麼,這個類的析構函式就必須宣告為虛函式,否則可能造成記憶體洩漏。

造成記憶體洩漏的例子:

有如下兩個類,類pet是基類,類dog繼承了類pet

class pet

class dog : public pet

dog::dog(const char * p)

*m_name='\0';

}else

strcpy(m_name,p); 

}dog::~dog()

有如下程式:

pet *mypet= new dog();//生成了乙個dog物件,呼叫了dog的建構函式,申請了記憶體m_name;

delete mypet;//靜態呼叫了類pet的析構函式,並沒有呼叫dog的析構函式,申請的記憶體沒有釋放

造成了記憶體洩漏

c 物件模型 虛擬析構函式

看 inside the c object model 第二章,彙總一下一些知識點 作為通常原則,如果乙個類定義了虛函式,那麼它的析構函式就應該定義成虛函式。因為定義了虛函式則意味著這個類會被繼承,並且會通過基類的指標指向子類,從而得到多型。因此,基類的析構函式是否為虛函式將決定子類的物件是否被析構...

C 析構函式 虛析構函式

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

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...