Є об’єкт класу QNetworkReply. Існує слот (в якомусь іншому об’єкті), підключений до його сигналу готової (). Сигнали синхронні (типові). Існує лише одна нитка.
У якийсь момент часу я хочу позбутися обох предметів. Більше ні сигналів, ні чого-небудь від них. Я хочу, щоб вони зникли. Ну, подумав я, скористаюся
delete obj1; delete obj2;
Але чи можу я насправді? Специфікації для ~ QObject говорять:
Видалення об'єкта QOb, поки очікують на доставку очікувані події, може призвести до аварійного завершення роботи.
Що таке "очікувані події"? Чи може це означати, що поки я телефоную до свого delete
, вже є деякі "очікувані події", які мають бути доставлені, і що вони можуть спричинити збій, і я не можу перевірити, чи є такі?
Тож, скажімо, я телефоную:
obj1->deleteLater(); obj2->deleteLater();
Щоб бути в безпеці.
Але, чи справді я в безпеці? deleteLater
Додає подія , яке буде оброблятися в головному циклі , коли елемент управління отримує там. Чи можуть бути деякі очікувані події (сигнали) для obj1
або obj2
вже там, які чекають обробки в основному циклі до обробки deleteLater? Це було б дуже прикро. Я не хочу писати код, перевіряючи статус "дещо видаленого" та ігноруючи вхідний сигнал у всіх моїх слотах.
obj->disconnect(); obj->deleteLater();
це правильний шлях: