【C++杂记】C++父类指针指向子类对象

C++父类指针指向子类对象时,父类析构必须为虚函数

示例1 [1]:

#include <iostream>
using namespace std;

class Base_J 
{
public:
    Base_J()
    {
        cout << "Base Created" << endl;
    }
    ~Base_J()
    {
        cout << "Base Destroyed" << endl;
    }
};

class Derived_J : public Base_J
{
public:
    Derived_J()
    {
        cout << "Derived Created" << endl;
    }
    ~Derived_J()
    {
        cout << "Derived Destroyed" << endl;
    }
};

int main()
{
    Base_J *pB = new Derived_J();
    delete pB;
    pB = NULL;
    system("pause");
    return 0;
}

上述代码运行结果:
Base Created
Derived Created
Base Destroyed

可以看到父类对象析构函数没有被执行,这会造成内存泄漏。

解决办法:将基类的析构函数写成虚函数即可,如下,

class Base_J 
{
public:
    Base_J()
    {
        cout << "Base Created" << endl;
    }
    virtual ~Base_J()
    {
        cout << "Base Destroyed" << endl;
    }
};

参考文献

[1] 基类与派生类,父类指针指向子类对象

有空可以看看 C++多态详解

猜你喜欢

转载自blog.csdn.net/u011362297/article/details/81585900