Fau*_*ult 2 c++ destructor memory-leaks delete-operator
关于正确处理析构函数的相对简单的问题......
首先,我有一个类似这样的课程:
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;
}
Run Code Online (Sandbox Code Playgroud)
因此该函数只删除使用"new"创建的对象.问题是一个Object类:
class Bar : public Object {
public:
Bar() {
baz = new Baz();
}
~Bar() { delete baz; }
private:
Baz* baz;
}
Run Code Online (Sandbox Code Playgroud)
如果我向Foo添加一个类型Baz对象,然后尝试ReleaseObjects(),我会得到一个内存泄漏(valgrind).问题指向baz被泄露,我猜这意味着bar中的析构函数从未被调用过?所以我想知道的是在尝试销毁该对象时如何调用Bar析构函数(我不能改变Bar类,但我可以改变Foo).
编辑:哎呀,抱歉语法错误.无论如何,感谢所有的回复,愚蠢的我忘了在我的Baz课程中实现一个正确的析构函数!哦,Baz实际上是一个模板类,但我认为Baz与我的问题有点无关,而且问题是Bar中的析构函数没有被调用......好吧,我错了,毕竟问题出现在Baz中.但再次感谢,我想我从这里弄清楚了!
您必须确保析构函数是虚拟的,以便调用正确的派生析构函数.
class Object {
. . .
virtual ~Object()
. . .
};
Run Code Online (Sandbox Code Playgroud)