c++ 虛解構函式[避免記憶體洩漏]

weixin_34402090發表於2014-11-13

 

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;
}

 

相關文章