為什麼C 基類析構函式寫成虛函式

2021-07-04 02:21:41 字數 992 閱讀 8578

下面的**舉例:

// virtual.cpp : 定義控制台應用程式的入口點。

//

#include "stdafx.h"

#include

#define maxlen 128

class cemployee

~cemployee()

protected:

private:

};class coperator:public cemployee

~coperator()

};int _tmain(int argc, _tchar* argv)

函式的返回結果是:

可以看到值呼叫了父類的析構函式,而子類的析構函式沒有被呼叫,那麼可想而知,如果在子類的建構函式中對某個成員函式在堆空間中分配了空間,而之類沒有被呼叫,是不是會造成記憶體洩漏呢?答案是肯定的,那有什麼辦法可以解決這種情況下出現的記憶體洩漏呢?那就是把父類的析構函式寫為虛函式,看下面的**:

// virtual.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#define maxlen 128

class cemployee

virtual ~cemployee()

protected:

private:

};class coperator:public cemployee

~coperator()

};int _tmain(int argc, _tchar* argv)

執行結果:

因此,在寫父類的時候,最好將其析構函式寫為虛函式。這樣可以防止比較癮避的記憶體洩漏。

為什麼基類的析構函式要寫成虛函式?

答 在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。說明如下 第一段 includeusing namespace std class clxbase clxbase void dosomething class clxderived public clxbase ...

為什麼基類的析構函式是虛函式

1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase void dosomething class clxd...

為什麼基類的析構函式是虛函式

1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase void dosomething class clxd...