Hay un objeto de la clase QNetworkReply. Hay una ranura (en algún otro objeto) conectada a su señal terminada(). Las señales son sincrónicas (las predeterminadas). Solo hay un hilo¿Cómo funciona delete and deleteLater en lo que respecta a señales y ranuras en Qt?
En algún momento del tiempo que quieren deshacerse de los dos objetos. No más señales ni nada de ellos. Quiero que se vayan. Bueno, pensé, voy a utilizar
delete obj1; delete obj2;
Pero ¿Puedo realmente? Las especificaciones para ~ QObject dicen:
Eliminación de un QObject mientras que los eventos pendientes en espera de ser entregado puede causar un accidente.
¿Cuáles son los 'eventos pendientes'? ¿Podría significar que mientras estoy llamando a mi delete
, ya hay algunos 'eventos pendientes' para entregar y que pueden causar un bloqueo y realmente no puedo verificar si hay alguno?
Así que digamos que llamo:
obj1->deleteLater(); obj2->deleteLater();
para estar seguro.
Pero, ¿estoy realmente a salvo? El deleteLater
agrega un evento que se manejará en el bucle principal cuando llegue el control. ¿Puede haber algunos eventos pendientes (señales) para obj1
o obj2
ya está ahí, esperando a ser manejado en el bucle principal antes deleteLater será manejado? Eso sería muy desafortunado. No quiero escribir código para verificar el estado "algo borrado" e ignorar la señal entrante en todas mis ranuras.
Parece 'obj-> disconnect(); obj-> deleteLater(); 'es el camino correcto a seguir: – stach