Проблема удаления дочерних объектов QSA
У меня есть некоторые проблемы с удалением объектов QSA. В конструкторе я написал:
QSProject * project = {initialization of QSProject}
MyWrapper * wrapper = new MyWrapper; // MyWrapper is QObject's child. It comes without parent here
project->addObject(wrapper);
Я написал в descructor:
project->clearObjects();
delete project;
delete wrapper;
Этот код вызывает ошибку при выполнении деструктора, именно тогда, когда я пытаюсь удалить оболочку.
Я провел небольшое исследование и знаю, что:
- QSProject не удаляет свои "дочерние объекты", так что это не проблема "двойного удаления"
- Если я не добавлю упаковщик в QSProject в конструкторе, он будет работать хорошо.
- Если я не удаляю обертку в дескрипторе, она работает хорошо (но утечки памяти).
Что происходит?
1 ответ
Во-первых, я не знаком с QSA, но, учитывая, как обычно работает Qt API, QSProject, скорее всего, станет владельцем объекта. Это означает, что QSProject перезаписывает объект с помощью QObject:: setParent ().
В этом случае вы дважды удаляете объект.
Проверено ли с помощью такого инструмента, как valgrind, что вы фактически теряете память, когда опускаете удаление?