关于正确处理析构函数的相对简单的问题...
首先,我有一个类,大致如下:
class Foo {
public:
ReleaseObjects() {
for (std::map<size_t, Object*>::iterator iter = objects.begin(); iter != objects.end(); iter++) {
delete (*iter).second;
}
objects.clear();
}
private:
std::map<size_t,Object*> objects;
}
所以这个函数只是删除使用“new”创建的对象。问题在于一个Object类:
class Bar : public Object {
public:
Bar() {
baz = new Baz();
}
~Bar() { delete baz; }
private:
Baz* baz;
}
如果我将类型为Baz的对象添加到Foo中,然后尝试ReleaseObjects(),则会出现内存泄漏(通过valgrind)。问题指向baz泄漏,我猜这意味着bar中的析构函数从未被调用?所以我想知道的是如何在尝试销毁该对象时调用Bar析构函数(我无法更改Bar类,但我可以更改Foo)。
编辑: 哎呀,对于语法错误我表示抱歉。无论如何,感谢所有回复,愚笨的我忘记在我的Baz类中实现正确的析构函数!哦,Baz实际上是一个模板类,但我觉得Baz与我的问题有点不相关,问题实际上在于Bar中的析构函数没有被调用...好的,再次感谢,我认为我已经从这里解决了问题!