條款7 為多态基類聲明virtual析構函數
如有以下關系,不使用virtual關系會出現資源洩漏
//base class
class TimeKeeper
{
public:
virtual TimeKeeper* getTimeKeeper()
{
return NULL;
}
};
class AtomTimeKeeper: public TimeKeeper
{
public:
AtomTimeKeeper(){
pData=new char[];
}
TimeKeeper* getTimeKeeper()
{
return myAtom;
}
private:
int a;
char * pData;
static AtomTimeKeeper* myAtom;
};
AtomTimeKeeper* AtomTimeKeeper::myAtom = new AtomTimeKeeper();
int main()
{
AtomTimeKeeper myAtom;
TimeKeeper* pTime=myAtom. getTimeKeeper();
delete pTime;//這将引起部分記憶體洩漏
return ;
}