在下面的代码中,当ptr
被删除时,Base
调用的是析构函数for,而不是析构函数for Derived
(由于析构函数Base
不是虚拟的)。
class Base
{
int b;
};
class Derived : public Base
{
int d;
};
int main(void)
{
Base * ptr = new Derived();
delete ptr;
return 0;
}
Valgrind 报告说该程序不包含内存泄漏,我猜这是真的,因为在这种特殊情况下所有新数据都被删除了。我的问题是 - 鉴于Derived
未调用(默认)析构函数,何时以及如何d
释放或回收内存?