Отключение объекта Qt Signals и Slots?

Мне интересно, нужно ли мне отключать синглы и слоты, если я уничтожаю объект, излучающий сигнал. Вот пример:

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, или это приведет к утечке памяти или другому неопределенному поведению?

Заранее спасибо.


person Anton    schedule 13.02.2012    source источник
comment
Хотя QObjects безопасно очищает соединения, когда они разрушаются, я бы рекомендовал не удалять QObject, у которого уже был установлен родительский элемент, как у вас выше, поскольку это приведет к короткому замыканию автоматических механизмов, уже установленных для QObjects. Также обычно безопаснее использовать deleteLater() вместо прямого удаления QObject.   -  person Arnold Spence    schedule 13.02.2012


Ответы (2)


Сигналы автоматически отключаются при вызове деструктора QObject. Взгляните на документацию Qt: QObject Destructor

person Adrien BARRAL    schedule 13.02.2012

Вам не нужно вручную disconnect() обрабатывать сигналы и слоты, QObject уничтожение очищает их автоматически.

person Frank Osterfeld    schedule 13.02.2012