Мне интересно, нужно ли мне отключать синглы и слоты, если я уничтожаю объект, излучающий сигнал. Вот пример:
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)));
Будет ли это автоматически отключать сигнал от старого audioOutput, или это приведет к утечке памяти или другому неопределенному поведению?
Заранее спасибо.
QObject
s безопасно очищает соединения, когда они разрушаются, я бы рекомендовал не удалятьQObject
, у которого уже был установлен родительский элемент, как у вас выше, поскольку это приведет к короткому замыканию автоматических механизмов, уже установленных дляQObject
s. Также обычно безопаснее использоватьdeleteLater()
вместо прямого удаленияQObject
. - person Arnold Spence   schedule 13.02.2012