2012-02-13 12 views
20

Me pregunto si necesito desconectar singals y slots si destruyo el objeto que emite la señal. Aquí está un ejemplo:Qt Signals and Slots object disconnect?

QAudioOutput * audioOutput = new QAudioOutput(format,mainWindow); 
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State))); 

delete audioOutput; 

audioOutput = new QAudioOutput(format,mainWindow); 
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State))); 

¿Esta desconectar automáticamente la señal de la vieja audioOutput, o va a dar lugar a fugas mem o algún otro comportamiento indefinido?

Gracias de antemano.

+0

Aunque 'QObject' limpia las conexiones de forma segura cuando se destruyen, recomendaría no eliminar un' QObject' que ya ha configurado su matriz como la anterior, ya que esto cortará Circule los mecanismos automáticos ya instalados para 'QObject's. También es generalmente más seguro usar 'deleteLater()' en lugar de eliminar un 'QObject' directamente. –

Respuesta

32

Las señales se desconectan automáticamente cuando llama al destructor de QObject. Eche un vistazo a la documentación de Qt: QObject Destructor

3

No tiene que desconectar manualmente las señales y las ranuras, la destrucción de QObject las limpia automáticamente.

Cuestiones relacionadas