Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > утечка памяти ?


Автор: Remiznik 7.4.2009, 23:11
тут в одной теме Любитель написал 
Цитата

1. Зачем выделять память под res динамически? Вылетать из-за этого не будет, просто вопиющие мемори-лики тоже не есть хорошо..


то есть 
Код

int main(int argc, char *argv[])
{
           QApplication app(argc, argv);
           Treug *res = new Treug; //утечка 
           res->show();
           return app.exec();
}


так хотелось бы узнать в чём утечка ? ну создаём мы его динамически но один раз же ? 

извените что если совсем ламерский вопр ... но очень интересно узнать !

Автор: SABROG 8.4.2009, 08:21
Скорее всего он имел ввиду другие ситуации и правила хорошего тона программирования. Конкретно для этого примера это не существенно. На худой конец для таких окон есть аттрибут Qt::WA_DeleteOnClose, но вот с QObject'ами у которых нет родителя так не получится. Разве что контролировать создание и уничтожение объектов через QObjectCleanupHandler.

Автор: Любитель 8.4.2009, 20:27
Цитата(Remiznik @  7.4.2009,  23:11 Найти цитируемый пост)
так хотелось бы узнать в чём утечка ? ну создаём мы его динамически но один раз же ? 

Ты к тому, что память будет освобождена при завершении работы приложения? Да, будет. Но:
1. Зачем привыкать к плохому smile 
2. Есть ещё деструктор, который в данном случае не выполнится. А деструктор может освобождать и персистентные (относительно процесса приложения) ресурсы.

Да - если строго подходить к вопросу, то конкретно в твоём случае ничего бы не случилось. Но в любом случае это отвратительная практика.

PS Remiznik, тебя интересовал вопрос именно в свете Qt-шных особенностей? А то перенесу в "Общие вопросы".. smile

Автор: MAKCim 8.4.2009, 20:30
Цитата(Любитель @  8.4.2009,  20:27 Найти цитируемый пост)
1. Зачем привыкать к плохому

здесь можно поспорить  smile 

Автор: Любитель 8.4.2009, 20:39
MAKCim, давай smile

На всякий случай, что я имел ввиду под "плохим" - допустим, это выделение памяти и пр. (короче грубо говоря половину текущего мейна) мы переносим в другую функцию. Которую вызываем периодически в нашем приложении. Обычно развитие проекта, когда старая функциональность стала лишь частью новой. Только прямой рефакторинг окажется неудачным, именно потому что приведёт к мемори-ликам в чистом виде smile


Автор: Remiznik 8.4.2009, 21:20
Любитель, да это я спросил так чтоб узнать почему ты в той теме так написал а флудить там не хотелось !

Ну а вобше процесс утечки памяти в приложениях с использованием имеет Qt особую специфику или такуюже как в простом С++ ? Просто я пока не работал с большим приложением чтоб сталкнутся с утечкой и опыт ешо маловат чтоб за этим следить .... но разобираться в это как я понимаю необходимо !

Автор: MAKCim 8.4.2009, 21:25
Цитата(Любитель @  8.4.2009,  20:39 Найти цитируемый пост)
Только прямой рефакторинг окажется неудачным, именно потому что приведёт к мемори-ликам в чистом виде

кто мешает добавить освобождение ресурсов после вызова функции?
а если ресурсы локальны по отношению к функции, то это ошибка, т. к все локальные ресурсы должны быть освобождены при выходе из функции (в большинстве не специфичных случаев)

Автор: Любитель 8.4.2009, 21:34
Цитата(Remiznik @  8.4.2009,  21:20 Найти цитируемый пост)

Ну а вобше процесс утечки памяти в приложениях с использованием имеет Qt особую специфику или такуюже как в простом С++ ?

Вообщем-то нет. Есть концепция парент-чайлдов, но эта концепция не в Qt придумана и особого отношения к Qt не имеет.

Цитата(MAKCim @  8.4.2009,  21:25 Найти цитируемый пост)
кто мешает добавить освобождение ресурсов после вызова функции?

А зачем вообще делать себе проблемы, если можно (да-да, конечно, если) обойтись без динамического выделения памяти?

Цитата(MAKCim @  8.4.2009,  21:25 Найти цитируемый пост)
а если ресурсы локальны по отношению к функции, то это ошибка, т. к все локальные ресурсы должны быть освобождены при выходе из функции

Смотрим код в первом посте smile

Цитата(MAKCim @  8.4.2009,  21:25 Найти цитируемый пост)
в большинстве не специфичных случаев

Собственно про это я и хотел в первую очередь услышать от тебя. Только поподробней.. smile 

Автор: J0ker 8.4.2009, 22:23
Цитата(MAKCim @ 8.4.2009,  21:25)
кто мешает добавить освобождение ресурсов после вызова функции?

разные кучи в случае функции в dll

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)