2012-02-13 14 views
20

मुझे आश्चर्य है कि अगर मैं सिग्नल उत्सर्जक ऑब्जेक्ट को नष्ट करता हूं तो मुझे सिंगल और स्लॉट डिस्कनेक्ट करने की आवश्यकता है।क्यूटी सिग्नल और स्लॉट ऑब्जेक्ट डिस्कनेक्ट?

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 से संकेत डिस्कनेक्ट हो जाएगा, या यह मेम लीक या कुछ अन्य अपरिभाषित व्यवहार को बढ़ावा मिलेगा: यहाँ एक उदाहरण है?

अग्रिम धन्यवाद।

+0

हालांकि 'QObject's जब वे नष्ट कर रहे हैं तो आप इस के बाद से ऊपर है के रूप में कम होगा मैं एक' QObject' पहले से ही अपने माता-पिता को स्थापित किया था है कि को हटाने के खिलाफ की सिफारिश करेंगे सुरक्षित रूप से कनेक्शन को साफ 'QObject की 'के लिए पहले से ही स्वचालित तंत्र को सर्किट करें। 'QObject' को सीधे हटाने के बजाय' deleteLater() 'का उपयोग करना आम तौर पर सुरक्षित है। –

उत्तर

32

जब आप QObject विनाशक को कॉल करते हैं तो सिग्नल स्वचालित रूप से डिस्कनेक्ट हो जाते हैं। क्यूटी प्रलेखन पर एक नज़र डालें: QObject Destructor

3

आपको सिग्नल और स्लॉट मैन्युअल रूप से डिस्कनेक्ट करने की आवश्यकता नहीं है, QObject विनाश स्वचालित रूप से उन्हें साफ़ कर देता है।

संबंधित मुद्दे