在實現多態時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。
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()