2010-07-16 13 views
9

क्यूटी ऑब्जेक्ट्स के जीवनकाल क्या हैं?लाइफटाइम ऑफ क्यूटी ऑब्जेक्ट्स

जैसे:

QTcpSocket *socket=new QTcpSocket(); 

सॉकेट नष्ट हो जाएगा? मैं का उपयोग करना चाहिए

वहाँ के साथ कोई अंतर है:

QTcpSocket socket; 

मैं इस बारे में गहरी जानकारी को नहीं पा सके, किसी भी टिप्पणी या लिंक का स्वागत किया है।

उत्तर

11

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

आप माता-पिता के बिना कर सकते हैं लेकिन वास्तव में आपको मैन्युअल रूप से delete ऑब्जेक्ट करना होगा।

व्यक्तिगत रूप से मैं बेवकूफ क्यूटी के लिए चिपकने और माता-पिता के पेड़ में सभी वस्तुओं को जोड़ने का सुझाव देता हूं।

9

new के साथ आवंटित ऑब्जेक्ट delete के साथ जारी किए जाने चाहिए।

हालांकि, क्यूटी के साथ, अधिकांश ऑब्जेक्ट्स में माता-पिता हो सकते हैं, जिसे आप कन्स्ट्रक्टर के लिए तर्क के रूप में निर्दिष्ट करते हैं। जब माता-पिता को हटा दिया जाता है, तो बच्चे की वस्तुएं स्वचालित रूप से हटा दी जाती हैं।

+0

हटाए जाने का प्रयास करते समय, मुझे रनटाइम त्रुटि मिलती है (QHostAddress में निजी सदस्य तक पहुंचने के लिए परीक्षण के बारे में) – metdos

+0

निजी सदस्य का उपयोग रनटाइम पर केवल जांच के दौरान नहीं किया जाता है। शायद यह एक दुर्घटना है? फिर आपकी ऑब्जेक्ट शायद दो बार हटा दी गई है। –

2

यदि आप किसी कारण से माता-पिता को पास नहीं करना चाहते हैं (क्योंकि कोई QObject नहीं है जहां सॉकेट ऑब्जेक्ट के मालिक होने का अर्थ होता है), तो आप जीवन भर के प्रबंधन के लिए QSharedPointer का भी उपयोग कर सकते हैं।

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