2012-02-13 8 views
20

Tôi tự hỏi nếu tôi cần phải ngắt kết nối singals và khe nếu tôi phá hủy các tín hiệu phát ra đối tượng. Dưới đây là ví dụ:Tín hiệu Qt và Slots đối tượng ngắt kết nối?

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

Điều này có thể tự động ngắt kết nối tín hiệu khỏi âm thanh cũ hoặc sẽ dẫn đến rò rỉ mem hoặc một số hành vi không xác định khác không?

Cảm ơn bạn trước.

+0

Mặc dù 'QObject' s dọn dẹp an toàn các kết nối khi chúng bị hủy. Tôi khuyên bạn nên xóa một 'QObject' đã có tập hợp cha mẹ như bạn đã nói ở trên vì điều này sẽ ngắn mạch các cơ chế tự động đã có sẵn cho 'QObject' s. Nó cũng thường an toàn hơn khi sử dụng 'deleteLater()' thay vì xóa trực tiếp 'QObject'. –

Trả lời

32

Các tín hiệu sẽ tự động ngắt kết nối khi bạn gọi trình phá hủy QObject. Hãy xem tài liệu Qt: QObject Destructor

3

Bạn không phải tự ngắt kết nối tín hiệu và vị trí, việc hủy diệt QObject sẽ tự động xóa chúng.