Нужно ли удалять каждый (указатель) элемент QSet вручную? - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть ученик:

QSet<QDialog*>* dialogs_;  

Нужно ли удалять только диалоги_ или мне нужно вызывать delete и для каждого его элемента?

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Это поможет:

qDeleteAll(*dialogs_);
delete dialogs_

Вы также можете сделать это без разыменования:

qDeleteAll(dialogs_->begin(), dialogs->end());
delete dialogs_
1 голос
/ 17 декабря 2011

Да, вам нужно как-то вручную удалить каждый QDialog в dialogs_, если он есть.

Вы можете сами повторить их QSet и delete вручную. Поскольку QDialog наследуется от QWidget, другим способом является просто delete родительский элемент всех диалогов, если родительский объект также размещен в бесплатном хранилище, что в свою очередь delete их.

Обратите внимание, что нет причин выделять QSet в бесплатном магазине, если вы этим занимаетесь. Вы можете сохранить операцию new / delete, просто сделав ее прямым членом вашего класса.

QSet<QDialog*> dialogs_;

Это еще одна вещь, о которой вам стоит беспокоиться. удаление вручную.

0 голосов
/ 17 декабря 2011

Сначала выполните итерацию по вашему набору, удалите все объекты в нем, а затем удалите объект из набора.

Однако обратите внимание, что Qt имеет свое собственное управление памятью, и, возможно, было бы хорошо просто удалить набор и оставить объекты в нем для уничтожения механизмом Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...