Относительно простой вопрос о правильной обработке деструкторов ...
Сначала у меня есть класс, который выглядит примерно так:
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'. Проблема в классе объекта:
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 не вызывается ... ну, я ошибался, проблема в конце концов в Baz. Но еще раз спасибо, я думаю, я понял это отсюда!