关于c ++:多态中基类缺少虚拟析构函数= Ressource leak?

Virtual destructor missing for base class in polymorphism = Ressource leak?

我们知道,如果您打算以多态方式使用基类的析构函数,则需要将它指定为虚拟的,否则您的程序中可能会出现资源泄漏,因为只调用基类析构函数,而不调用派生对象析构函数。

我们还知道构造函数/析构函数是纯粹的初始化/未初始化构造,而operator new/operator delete处理内存的分配/未分配。

在这种情况下,为什么在我的C++类只包含原始数据成员的情况下,缺少析构函数调用会导致泄漏?更准确地说,operator delete不能取消分配内存,这就是造成资源泄漏的原因吗?

编辑:添加一个示例,以澄清我的问题。在以下情况下,永远不会调用派生析构函数。这是否意味着派生的内存永远不会未分配?在这种情况下,是因为无法调用析构函数,还是因为运算符delete无法为int取消分配内存?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Base
{
    int baseInt;
public:
    Base(){};
    ~Base(){};
};

class Derived : public Base
{
    int derivedInt;
public:
    Derived(){};
    ~Derived(){};
};

int main(int argc, const char * argv[]) {

    Base *pb = new Derived();
    delete pb;

    return 0;
}

除非基类中的析构函数是虚拟的,否则通过指向基的指针删除对象会调用未定义的行为。来源

这意味着任何事情都可能发生,包括内存泄漏。