Проблема удаления дочерних объектов 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;

Этот код вызывает ошибку при выполнении деструктора, именно тогда, когда я пытаюсь удалить оболочку.

Я провел небольшое исследование и знаю, что:

  1. QSProject не удаляет свои "дочерние объекты", так что это не проблема "двойного удаления"
  2. Если я не добавлю упаковщик в QSProject в конструкторе, он будет работать хорошо.
  3. Если я не удаляю обертку в дескрипторе, она работает хорошо (но утечки памяти).

Что происходит?

1 ответ

Во-первых, я не знаком с QSA, но, учитывая, как обычно работает Qt API, QSProject, скорее всего, станет владельцем объекта. Это означает, что QSProject перезаписывает объект с помощью QObject:: setParent ().

В этом случае вы дважды удаляете объект.

Проверено ли с помощью такого инструмента, как valgrind, что вы фактически теряете память, когда опускаете удаление?

Другие вопросы по тегам