![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
йцукен |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 28.12.2007 Пользователь №: 57 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я так и не понял, когда происходит освобождегние памяти в вызове QObject::deleteLater?
Это эдентично такому коду или нет? QObject *pObj; // ... delete pObj; pObj = 0; |
|
|
![]() |
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Как я понял память освобождается после того, как были обработаны все события.
И если выполнить тот код, который вы привели ниже, может произойти ошибка, из-за того, что некоторые слоты не успели отработать, а обьект уже удален. Если перевести описание данной функции, то вот, что получиться: Цитата void QObject::deleteLater () [slot]
Отмечает объект для удаления. Объект будет удален когда контроль вернется к циклу обработки сообщений. Обратите внимание, что вход и выход из нового цикла обработки событий (например при открытии модального диалога) не выполнят отсроченное удаление; для того чтобы объект был удален, управление должно вернуться в тот цикл обработки событий, в котором была вызвана deleteLater(). См. также destroyed() и QPointer. Сообщение отредактировал ViGOur - 28.12.2007, 15:48 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 12:10 |