Russian Qt Forum

Qt => Общие вопросы => Тема начата: catprog от Май 13, 2009, 22:56



Название: Вопрос по удалению объектов
Отправлено: catprog от Май 13, 2009, 22:56
А конкретно по вот этому уроку:
http://doc.crossplatform.ru/qt/4.4.3/tutorials-tutorial-t5.html

Все ли объекты
QPushButton *quit = new QPushButton(tr("Quit"));
QLCDNumber *lcd = new QLCDNumber(2);
QSlider *slider = new QSlider(Qt::Horizontal);
удаляются в конце программы? или мне их надо удалять?


ЗЫ: Я это к тому спрашиваю, что когда запустить их много и закрыть, то размер занятой памяти больше чем до их запуска, а еще когда крутил этот пример у меня вылетал фаервол с ошибкой, правда это наверно тогда я накрутил.


Название: Re: Вопрос по удалению объектов
Отправлено: Авварон от Май 13, 2009, 23:07
В конце программы удаляются ВСЕ объекты. За это отвечает операционная система - такая уж у нее задача выделять память программам и забирать то, что выделила. Т.н. "утечки памяти" страшны во время работы программы.
А вообще, у данных виджетов нет родителей, посему их нужно удалить, в смысле - до конца программы об их удалении никто не позаботится. В конце, как уже сказано выше, всё очистит ось.


Название: Re: Вопрос по удалению объектов
Отправлено: lit-uriy от Май 13, 2009, 23:40
2 catprog, тебе ничего удалять не надо, см. код дальше
Код
C++ (Qt)
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(quit);
    layout->addWidget(lcd);
    layout->addWidget(slider);
    setLayout(layout);
Эти объекты помещаются в компановщик (layout), а он, в свою очередь устанавливается для текущего объекта setLayout(layout), что делает текущий (MyWidget) объект родителем всех объектов находящихся в его компановщике.
И при уничтожении MyWidget он удалит всех своих детей


Название: Re: Вопрос по удалению объектов
Отправлено: catprog от Май 14, 2009, 00:04
Ясно, спасибо.