2012-02-13 18 views
20

Mi chiedo se devo disconnettere i singoli e gli slot se distruggo l'oggetto che emette il segnale. Ecco un esempio:Disconnetti oggetto Qt e slot?

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))); 

Sarà questo disconnettere automaticamente il segnale proveniente dal vecchio audioOutput, o intende portare a perdite MEM o qualche altro comportamento indefinito?

Grazie in anticipo.

+0

Sebbene 'QObject's pulisca in modo sicuro le connessioni quando vengono distrutte, consiglio l'eliminazione di un' QObject' che ha già avuto il suo genitore impostato come sopra visto che questo sarà breve circuito i meccanismi automatici già in atto per 'QObject's. In genere è anche più sicuro usare 'deleteLater()' invece di eliminare direttamente un 'QObject'. –

risposta

32

I segnali vengono disconnessi automaticamente quando si chiama il distruttore QObject. QObject Destructor

3

Non è necessario disconnettere manualmente i segnali e gli slot, la distruzione di QObject li pulisce automaticamente.