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