Существует объект класса QNetworkReply. Существует слот (в каком-то другом объекте), подключенный к его завершенному() сигналу. Сигналы синхронны (по умолчанию). Существует только один поток.Как delete и deleteLater работает в отношении сигналов и слотов в Qt?
В какой-то момент времени я хочу избавиться от обоих объектов. Больше никаких сигналов или чего-либо от них. Я хочу, чтобы они ушли. Ну, я думал, я буду использовать
delete obj1; delete obj2;
Но могу ли я на самом деле? Спецификации для ~ QObject сказать:
Удаление QObject в то время как в ожидании событий, ожидающих быть доставлены может привести к аварии.
Что такое «ожидающие события»? Может ли это означать, что, когда я звоню в мой delete
, уже есть какие-то «ожидающие события», которые могут быть доставлены, и что они могут вызвать сбой, и я не могу проверить, есть ли они?
Итак, давайте говорить, что я называю:
obj1->deleteLater(); obj2->deleteLater();
Чтобы быть в безопасности.
Но я действительно в безопасности? В deleteLater
добавляется событие, которое будет обрабатываться в основном цикле, когда элемент управления попадает туда. Могут ли быть ожидающие события (сигналы) для obj1
или obj2
уже там, ожидающие обработки в основном контуре до deleteLater будет обработан? Это было бы очень неудачно. Я не хочу писать проверку кода для статуса «несколько удаленных» и игнорирования входящего сигнала во всех моих слотах.
Похож на 'obj-> disconnect(); obj-> deleteLater(); 'правильный путь: – stach