c++ 虛解構函式:
虛解構函式
(1)虛解構函式即:定義宣告解構函式前加virtual 修飾, 如果將基類的解構函式宣告為虛解構函式時,
由該基類所派生的所有派生類的解構函式也都自動成為虛解構函式。
(2)基類指標pbase 指向用new動態建立的派生類物件child時,用“delete pbase;”刪除物件分兩種情況:
第一,如果基類中的解構函式為虛解構函式,則會先刪除派生類物件,再刪除基類物件
第二,如果基類中的解構函式為非虛解構函式,則只會刪除基類物件,不會刪除派生類物件,這樣便出現了記憶體洩漏了
#include <iostream> using namespace std; #include <string> //////////////////////////// class Base { public: #if 0 virtual ~Base();// in Child::~Child() in Base::~Base() #else ~Base(); // in Base::~Base() 存在記憶體洩漏的危險 #endif }; Base::~Base() { cout<<"in Base::~Base()"<<endl; } //////////////////////////// class Child: public Base { public: ~Child(); }; Child::~Child() { cout<<"in Child::~Child()"<<endl; } int demo() { Base *pc = new Child; cout<<"-----------"<<endl; delete pc; cout<<"-----------"<<endl; return 0 ; } int main() { demo(); while(1); return 0; }