2012-02-13 16 views
20

私はシグナルを放出するオブジェクトを破壊する場合、私はsingalsとスロットを切断する必要があるのだろうかと思います。次に例を示します。Qt信号とスロットオブジェクトの切断?

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からの信号を切断する、またはそれはMEMリークや他のいくつかの未定義の動作につながるのだろうか?

ありがとうございます。

+0

'QObject'が破壊されたときに接続を安全にクリーンアップすることはできますが、これは親がすでに設定されている' QObject'を削除することをお勧めします'QObject'のための自動機構を既に配置してください。 'QObject'を直接削除するのではなく、' deleteLater() 'を使うのが一般に安全です。 –

答えて

32

QObjectデストラクタを呼び出すと、シグナルは自動的に切断されます。 QObject Destructor

3

信号とスロットを手動で切断する必要はありません。QObjectの破棄によって自動的に消去されます。

関連する問題