Base
是基类,Derived
是派生类。
Base* p = new Derived;
delete p;
让我们假设基础析构函数不是虚拟的。这是否会导致内存泄漏,如果是,为什么?什么是解决它的解决方案?
答案 0 :(得分:2)
可能。
可能没有。
它可能会破坏您的计算机。
它有未定义的行为。
不要再问它了,根本就不去做。 :)
答案 1 :(得分:0)
“我们假设基础析构函数不是虚拟的。这是否会导致内存泄漏,”
很容易,是的。如果Derived
拥有一些应该用它的析构函数删除的动态分配的内存。
“如果是,为什么?”
见上面的解释。 <{1}}的析构函数不会被调用。
“解决它的解决方案是什么?”
制作Derived
类析构函数Base
。
答案 2 :(得分:0)
假设两个类都有简单的析构函数,但Derived类的成员具有Base没有的非平凡析构函数。 (例如std :: vector)会泄漏内存,因为不会调用vector的析构函数。
答案 3 :(得分:0)
如果Base
类中没有动态成员数据,则不会导致内存泄漏。仍然闻到气味。代码味道。