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