2011-05-23 14 views
9

आम तौर पर जब मैं किसी ऑब्जेक्ट को हटाता हूं तो मैं इसे शून्य पर सेट करता हूं। इससे मदद मिलती है कि ऑब्जेक्ट की जांच करने के लिए मैं अपने दिनचर्या को कोड करता हूं शून्य नहीं है और आगे बढ़ें।ऑब्जेक्ट को शून्य करने के लिए QObject :: deleteLater() को मैं कैसे प्राप्त कर सकता हूं?

हालांकि अगर मैं deleteLater() फ़ंक्शन का उपयोग करता हूं तो मैंने इसका नियंत्रण खो दिया है। मुझे नहीं पता कि यह एक वैध वस्तु है या मुझे एक नया निर्माण करने की आवश्यकता है। मैंने जो समाधान पाया वह राज्य को अलग-अलग ट्रैक रखने के लिए था, हालांकि क्या कोई बेहतर तरीका है?

उत्तर

16

अगर आप अपनी ऑब्जेक्ट पर deleteLater() को कॉल करते हैं तो कुछ भी गलत नहीं है और फिर अपने पॉइंटर को न्यूल पर सेट करें। क्यूटी ढांचा आपके लिए वस्तु को सुरक्षित रूप से हटा देगा।

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

9

यदि आप हटाए जा रहे ऑब्जेक्ट को QObject है तो आप QPointer का उपयोग कर सकते हैं। यह इसे पूर्ण पर सेट करेगा।

3

क्या आपका मतलब है, "पॉइंटर शून्य"? सी ++ में ऑब्जेक्ट और पॉइंटर के बीच भेद बनाने के लिए जावा की तुलना में यह अधिक महत्वपूर्ण है। यहां, यह विशेष रूप से महत्वपूर्ण है, क्योंकि यदि आप ऑब्जेक्ट को शून्य करते हैं तो उसका विनाशक काम नहीं करेगा। यदि आप ऑब्जेक्ट में पॉइंटर शून्य करते हैं, तो कोई समस्या नहीं है, क्योंकि क्यूटी ने "ऑब्जेक्ट-टू-बी-डिलीट" सूची में एक और पॉइंटर जोड़ा होगा।

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

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