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 的。这样,当一个基类的指针删除一个派生类对象时,派生类的析构函数会被调用。

 

posted @ 2018-09-27 16:59  那一剑的風情  阅读(197)  评论(0)    收藏  举报