class animal
//虛析構 解決的問題是 當子類中有堆區內容,釋放時候對導致釋放不乾淨,記憶體洩露
//virtual ~animal()
// //純虛析構
//有宣告 也必須有實現,類外實現
// 如果乙個類中 有了 純虛析構函式後,那麼這個類 也屬於抽象類
virtual ~animal() = 0;
virtual void speak() };
animal::~animal()
class cat :public animal
void speak()
~cat() }
char * m_name; //貓的姓名
};void test01()
int main()
當存在多型時, 子類有堆區內容, 釋放記憶體的時候,無法執行子類的析構函式, 在父類的析構函式前加上virtual關鍵字,讓父類的析構函式變成虛析構函式。
析構函式變成純虛函式,那麼要有宣告,也要有實現,否則會出現無法鏈結的錯誤,找不到純虛析構函式的實現, 有了純虛析構函式, 這個類也變成了抽象類。
多型 4 虛析構和純虛析構
下面我們通過乙個例子了解一下。include include using namespace std 父類 我們可以從執行結結果中看到,子類cat的析構函式沒有被呼叫,也就意味著我們在子類的建構函式中申請的一塊堆記憶體沒有被釋放。這樣是很不安全的。解決方法 通過虛析構或者純虛析構 將父類的析構函式變...
虛析構和純虛析構 C
解決父類無法釋放子類的堆區記憶體問題。注意 純虛析構無法例項化 虛析構和純虛析構 多型使用時,如果子類有物件開闢到堆區,那麼父類指標在釋放時無法呼叫到子類的析構 解決方式 將父類中的析構函式改為虛析構或者純虛析構 虛析構和純虛析構的共性 可以解決父類指標釋放子類物件 都需要有具體的函式實現虛析構和純...
C 虛函式,純虛函式,虛析構和純虛析構
c 虛函式 定義為虛函式是為了允許用基類的指標來呼叫子類的這個函式,是需要具體實現的 virtual void funtion1 c 純虛函式 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 vir...