我想知道在销毁发射信号的对象时,是否需要断开连接的信号和槽。这里有个例子:
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)));
这样做是否会自动断开与旧音频输出的信号连接,还是会导致内存泄漏或其他未定义的行为?
先行感谢。
QObject
在销毁时会安全地清理连接,但我建议不要删除已经设置了父对象的QObject
,就像您上面所做的那样,因为这将短路已经存在于QObject
中的自动机制。直接删除QObject
通常也不太安全,最好使用deleteLater()
方法。 - Arnold Spence