Esiste un oggetto di classe QNetworkReply. C'è uno slot (in qualche altro oggetto) collegato al suo segnale finito(). I segnali sono sincroni (quelli di default). C'è solo una discussione.In che modo delete e deleteLater funzionano per quanto riguarda i segnali e gli slot in Qt?
In qualche momento voglio liberarmi di entrambi gli oggetti. Niente più segnali o niente da loro. Li voglio spariti. Beh, ho pensato, io uso
delete obj1; delete obj2;
Ma Posso davvero? le specifiche per ~ QObject dicono:
Eliminazione di un QObject mentre gli eventi in corso sono in attesa di essere consegnati può causare un crash.
Quali sono gli "eventi in sospeso"? Potrebbe significare che mentre sto chiamando il mio delete
, ci sono già alcuni "eventi in sospeso" da consegnare e che possono causare un crash e non posso davvero controllare se ce ne sono?
Quindi diciamo che io chiamo:
obj1->deleteLater(); obj2->deleteLater();
per essere sicuri.
Ma, sono davvero al sicuro? Il numero aggiunge un evento che verrà gestito nel ciclo principale quando il controllo arriva. Possono esserci alcuni eventi (segnali) in sospeso per obj1
o obj2
già lì, in attesa di essere gestiti nel ciclo principale prima del deleteLater verrà gestito? Sarebbe molto sfortunato. Non voglio scrivere il controllo del codice per lo stato 'un po' cancellato 'e ignorare il segnale in arrivo in tutti i miei slot.
Sembra 'obj-> disconnect(); obj-> deleteLater(); 'è la strada giusta da fare: – stach