为什么我的析构函数从未被调用过?

Her*_*sky 12 c++ memory-leaks

我有一个基类A和一个派生类B:

class A
{
public:
    virtual f();
};

class B : public A
{
public:
     B()
     {
         p = new char [100];
     }
     ~B()
     {
         delete [] p;
     }
     f();
private:
    char *p;
};
Run Code Online (Sandbox Code Playgroud)

出于任何原因,析构函数永远不会被调用 - 为什么?我不明白这一点.

小智 36

您的基类需要一个虚拟析构函数.否则,如果仅使用类型为A*的指针,则不会调用派生类的析构函数.

virtual ~A() {};
Run Code Online (Sandbox Code Playgroud)

到A班


And*_*rew 7

A类应该有一个虚拟析构函数.没有它,将不会调用派生类析构函数.

  • 如果通过指向A的指针调用析构函数,则不会调用if. (2认同)