Russian Qt Forum
Сентябрь 28, 2024, 06:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: по поводу delete  (Прочитано 10986 раз)
Wachburn
Гость
« : Март 24, 2010, 21:25 »

по нажатии на кнопку создается диалоговое окно командой new... когда оно закрывается - оно уничтожается... так нужно ли вручную уничтожать элементы управления этого окна, для которых была выделена память в динамической области,например new QPushButton(), командой delete или они уничтожатся средствами Qt автоматически?
Записан
niXman
Гость
« Ответ #1 : Март 24, 2010, 21:46 »

Цитировать
командой new
это оператор.

а почему при помощи new, а не на стеке?
можно взглянуть на код?
Записан
cya-st
Гость
« Ответ #2 : Март 24, 2010, 21:52 »

Во избежание утечки памяти, на каждое new должно быть свое delete.
Записан
niXman
Гость
« Ответ #3 : Март 24, 2010, 21:54 »

Цитировать
Во избежание утечки памяти, на каждое new должно быть свое delete.
во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.
Записан
cya-st
Гость
« Ответ #4 : Март 24, 2010, 21:55 »

Уточнение. Сказанное выше справедливо для диалога, а для дочернего окна нужно установить атрибут pWidget->setAttribute(Qt::WA_DeleteOnClose);
Записан
cya-st
Гость
« Ответ #5 : Март 24, 2010, 22:01 »

Цитировать
Во избежание утечки памяти, на каждое new должно быть свое delete.
во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.
new - можно и надо использовать (тогда зачем new и delete присутствует в С++?), утечка памяти происходит в таких моментах и не только как я описал выше. В неумелых руках (к вам это не относится, а то сейчас топик не в то русло пойдет Улыбающийся) и оператор if может привести к утечке памяти. Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Март 24, 2010, 22:21 »

new - можно и надо использовать (тогда зачем new и delete присутствует в С++?), утечка памяти происходит в таких моментах и не только как я описал выше. В неумелых руках (к вам это не относится, а то сейчас топик не в то русло пойдет Улыбающийся) и оператор if может привести к утечке памяти. Улыбающийся

для модальных диалоговых окон лучше использовать стек - во впервых выделение памяти в стеке быстрее чем в куче, во вторых объект диалога сам удалится при выходе из метода.
Записан
niXman
Гость
« Ответ #7 : Март 24, 2010, 22:41 »

Цитировать
new - можно и надо использовать
спорить не стану, все равно не поймете.

Цитировать
тогда зачем new и delete присутствует в С++?
не для того, чтоб повсеместно, в пользовательском коде использовать. назначение другое.

Цитировать
утечка памяти происходит в таких моментах и не только
"утечка памяти, это интимное дело программиста и его кривых рук. возможно унаследованных" (c) niXman

Цитировать
для модальных диалоговых окон лучше использовать стек - во впервых выделение памяти в стеке быстрее чем в куче, во вторых объект диалога сам удалится при выходе из метода.
жаль не все это понимают.
Записан
zenden
Гость
« Ответ #8 : Март 24, 2010, 22:41 »

При удалении родительского объекта Qt автоматически удаляет все child-объекты.
Записан
niXman
Гость
« Ответ #9 : Март 24, 2010, 22:43 »

Цитировать
При удалении родительского объекта Qt автоматически удаляет все child-объекты.
ага.
а при завершении процесса, ОС удаляет всю выделенную им память. но это не значит что ее не нужно самому освобождать.
хотя, очень часто вижу обратное Смеющийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Март 24, 2010, 22:46 »

во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.

и получить Stack overflow
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Март 24, 2010, 22:51 »

но это не значит что ее не нужно самому освобождать.

Хочешь удалять сам - удаляй. Никто же не запрещает )) Это С++. Но и ненужно пропускать мимо сам функционал фрейворка
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
cya-st
Гость
« Ответ #12 : Март 24, 2010, 22:52 »

Цитировать
во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.
Если человек вызывает new значит надо и вызвать delete.
Записан
niXman
Гость
« Ответ #13 : Март 24, 2010, 23:03 »

во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.

и получить Stack overflow
вот скажите, к примеру, сколько нужно создать объектов типа QDialog, к примеру, на стеке, что получить сие чудо? Подмигивающий
Записан
cya-st
Гость
« Ответ #14 : Март 24, 2010, 23:08 »

во избежании утечек памяти, new лучше вообще не использовать. в 98% случаев, этого можно не делать.

и получить Stack overflow
вот скажите, к примеру, сколько нужно создать объектов типа QDialog, к примеру, на стеке, что получить сие чудо? Подмигивающий
А если предположить, что программа для девайса (симбиан например)? Я могу и ошибатся, но там тоже есть диалоги.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.174 секунд. Запросов: 23.