Корректное удаление виджета |
Здравствуйте, гость ( Вход | Регистрация )
Корректное удаление виджета |
kwisp |
24.9.2009, 13:24
Сообщение
#11
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Litkevich Yuriy |
24.9.2009, 13:30
Сообщение
#12
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kwisp |
24.9.2009, 13:33
Сообщение
#13
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
igor_bogomolov |
24.9.2009, 21:25
Сообщение
#14
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Всегда считал, что удалять классы потомки от QObject через delete чревато. Только через QObject::deleteLater(). Ведь к объекту может обратиться event loop, а мы уже класс грохнули. Получим крах приложения. Поправьте, если я не прав.
|
|
|
BRE |
24.9.2009, 21:53
Сообщение
#15
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Всегда считал, что удалять классы потомки от QObject через delete чревато. Только через QObject::deleteLater(). Вовсе не чревато. Одновременно доступ к объекту может осуществляться только из разных потоков. Если этого нет, то любой объект можно спокойно удалять delete (даже если у него есть parent). Ведь к объекту может обратиться event loop, а мы уже класс грохнули. Получим крах приложения. Поправьте, если я не прав. Если сейчас выполняется твоя функция (в которой удаляется какой то объект), то это говорит о том, что процессор выполняет код этой функции, а не обрабатывает события или делает что-то еще. |
|
|
Litkevich Yuriy |
24.9.2009, 22:16
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
BRE |
24.9.2009, 22:38
Сообщение
#17
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Litkevich Yuriy |
24.9.2009, 23:52
Сообщение
#18
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Сейчас глянул код деструктора - он давольно навороченый:
|
|
|
SABROG |
25.9.2009, 9:14
Сообщение
#19
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Ага, а потом делать рефакторинг приложения, если захочется добавить дополнительный поток. Лучше уж сразу deleteLater() использовать, если это не критично. Хотя я думаю, что в местах где скорость и память критичны - не используются QObject'ы.
|
|
|
BRE |
25.9.2009, 9:25
Сообщение
#20
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Ага, а потом делать рефакторинг приложения, если захочется добавить дополнительный поток. Лучше уж сразу deleteLater() использовать, если это не критично. Хотя я думаю, что в местах где скорость и память критичны - не используются QObject'ы. Не нужно удалять объект во всех методах класса, тогда в одном месте нужно будет заменить delete на deleteLater. Если решил добавить поток, который будет работать с объектом из главного потока, там по любому нужно будет делать телодвижения для обеспечения корректного доступа к нему из нескольких потоков. |
|
|
Текстовая версия | Сейчас: 28.12.2024, 8:42 |