2015-06-11 3 views
1

У меня проблема с атрибутом Qt5 WA_DeleteOnClose.WA_DeleteOnClose удалить всех участников?

В этой ситуации: У меня есть класс M, который расширяет QMainWindow, и в этом классе я использую массив, выделенный для кучи. Я прочитал это с WA_DeleteOnClose, когда окно M закрыто, и вызванный деструктор, каждый член с M как родительский.

Мой вопрос: что такое массив? Я знаю, что каждый назначенный стек член освобождается при вызове деструктора, и я знаю, что в обычных условиях мне нужно вызвать delete [] в моем массиве. Но в этих условиях? Если я не использую delete [], мой массив освобожден из-за атрибута WA_DeleteOnClose? Другой вопрос. Является ли атрибут WA_DeleteOnClose унаследованным от всех детей M? Другими словами, должен ли я установить для этого атрибута значение true во всех дочерних элементах?

ответ

0

Qt будет просто называть ваш деструктор, он не идет и не удаляет каждого члена вашего класса!
Если у вас есть delete[] myArray в деструкторе вашего класса, ваш массив будет удален правильно.

Если у вас нет delete[] вашего массива в деструкторе, он просочится.

Но еще лучше, не беспокойтесь, управляя памятью, это плохой стиль на C++ 11.
Используйте QVector или std::array вместо необработанного массива в своем классе.

+0

Спасибо! С QVector деструктор делает все сам, правильно? – madipi

+0

Да, точно! Это называется RAII. – tux3

+0

Спасибо! Извините, у меня есть другой вопрос. Является ли атрибут WA_DeleteOnClose унаследованным от всех детей M? Другими словами, должен ли я установить для этого атрибута значение true во всех дочерних элементах? – madipi

Смежные вопросы