多态性基类缺少虚拟析构函数=资源泄漏?

泰迪·恩格尔

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

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

在那种情况下,为什么在我的C ++类仅包含原始数据成员的情况下,缺乏析构函数调用会导致泄漏呢?说运营商删除不能取消分配内存,这会造成资源泄漏吗?

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

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;
}
尼尔·柯克

除非基类中的析构函数是虚拟的,否则通过指向基类的指针删除对象将导致未定义的行为。资源

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章