C++ 虚析构函数
class CBase
{
public:
CBase() {};
virtual ~CBase() {};
virtual void doSome() { cout << "doSome in class CBase!" << endl; };
private:
};
class CDerived : public CBase
{
public:
CDerived() {};
~CDerived() { cout << "CDerived destroy!" << endl; };
void doSome() { cout << "doSome in class CDerived!" << endl; };
private:
};
int main()
{
CBase * pBase = new CDerived;
pBase->doSome();
delete pBase;
return 0;
}
输出结果:

如果把CBase的析构函数 virtual 去掉,输出结果:

此时,CDerived 的析构函数没有被调用,造成内存泄漏。
所以,基类的虚函数要定义成 virtual 的。这样,当一个基类的指针删除一个派生类对象时,派生类的析构函数会被调用。

浙公网安备 33010602011771号