析構函數爲虛函數的必要性

在實現多態時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。

class Base {

Base(){}

~Base(){cout<<"Base::~Base()"<<endl;}

virtual void Work(){cout<<"Base::Work"<<endl;}

};


class Drive : public Base {

Drive(){}

~Drive(){cout<<"Drive::~Drive()"<<endl;}

virtual void Work(){cout<<"Drive::Work"<<endl;}

};


Base *pBase = new Drive();

pBase->Work();

delete pBase


輸出:

Drive::Work

Base::~Base()

對象沒有被完全delete。


如果在~Base()之前加上virtual ,輸出

Drive::Work

Drive::~Drive()

Base::~Base()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章