Russian Qt Forum

Программирование => С/C++ => Тема начата: SibBear от Январь 03, 2014, 07:21



Название: Удаление объекта
Отправлено: SibBear от Январь 03, 2014, 07:21
Здравствуйте. Вопрос новичка. Есть класс, основанный на QDialog, объект которого создается по нажатию меню:

Код:
void MainWindow::show_report()
{
    (...)
    Report* report=new Report(this);
    report->show();
}

Удалится ли этот объект после закрытия, и что нужно сделать, чтобы он удалился? Нужно ли создавать, например, вектор с указателями для последующего их удаления? Можно ли в деструкторе указать deleteLater()?

Спасибо.


Название: Re: Удаление объекта
Отправлено: Igors от Январь 03, 2014, 11:29
Проще всего установить флажок WA_DeleteOnClose


Название: Re: Удаление объекта
Отправлено: gil9red от Январь 03, 2014, 11:47
Только сейчас задумался: а что происходит с виджетом, у которого нет флага WA_DeleteOnClose и которого закрыли ( close(); )?
Он просто прячется( setVisible( false ); )?


Название: Re: Удаление объекта
Отправлено: Old от Январь 03, 2014, 12:00
Только сейчас задумался: а что происходит с виджетом, у которого нет флага WA_DeleteOnClose и которого закрыли ( close(); )?
Он просто прячется( setVisible( false ); )?
Да, он просто скрывается. Уничтожение произойдет, когда будет уничтожаться родитель (если он есть) или никогда.


Название: Re: Удаление объекта
Отправлено: gil9red от Январь 03, 2014, 12:05
Ясно :)


Название: Re: Удаление объекта
Отправлено: Serr500 от Январь 03, 2014, 13:10
Удалится ли этот объект после закрытия?
Нет. Он удалится только когда удалится его родитель.

что нужно сделать, чтобы он удалился?
Либо дать ему флаг WA_DeleteOnClose, либо вызвать где-нибудь внутри метод deleteLater().

Можно ли в деструкторе указать deleteLater()?
Нельзя. Деструктор вызывается уже в процессе разрушения объекта.


Название: Re: Удаление объекта
Отправлено: SibBear от Январь 03, 2014, 13:59
Ясно. Спасибо!


Название: Re: Удаление объекта
Отправлено: Alex Custov от Январь 03, 2014, 14:32
Зачем его вообще создавать динамически? Создавай в стеке и он удалится сам после выхода из метода


Название: Re: Удаление объекта
Отправлено: SibBear от Январь 03, 2014, 15:23
Зачем его вообще создавать динамически? Создавай в стеке и он удалится сам после выхода из метода
Потому что нужна возможность запускать несколько экземпляров.