这会导致内存泄漏吗?

时间:2015-04-03 16:28:24

标签: c++

Base是基类,Derived是派生类。

Base* p = new Derived;
delete p;

让我们假设基础析构函数不是虚拟的。这是否会导致内存泄漏,如果是,为什么?什么是解决它的解决方案?

4 个答案:

答案 0 :(得分:2)

可能。

可能没有。

它可能会破坏您的计算机。

它有未定义的行为

不要再问它了,根本就不去做。 :)

答案 1 :(得分:0)

  

“我们假设基础析构函数不是虚拟的。这是否会导致内存泄漏,”

很容易,是的。如果Derived拥有一些应该用它的析构函数删除的动态分配的内存。

  

“如果是,为什么?”

见上面的解释。 <{1}}的析构函数不会被调用。

  

“解决它的解决方案是什么?”

制作Derived类析构函数Base

答案 2 :(得分:0)

假设两个类都有简单的析构函数,但Derived类的成员具有Base没有的非平凡析构函数。 (例如std :: vector)会泄漏内存,因为不会调用vector的析构函数。

答案 3 :(得分:0)

如果Base类中没有动态成员数据,则不会导致内存泄漏。仍然闻到气味。代码味道。