2010-11-24 13 views
7

बनाने और हटाने के लिए मैंने सुना है कि विगेट्स को ढेर पर (नए का उपयोग करके) आवंटित किया जाना चाहिए, और फिर उन्हें हटाने की कोई आवश्यकता नहीं है (यह स्वचालित रूप से किया जाता है)।एक क्यूटी विजेट ऑब्जेक्ट

  1. क्या कोई समझा सकता है क्यों?
  2. क्या होता है यदि विजेट को इस तरह आवंटित नहीं किया जाता है, लेकिन एक ढेर पर?

मुझे यकीन नहीं है कि यह महत्वपूर्ण है, लेकिन मेरे द्वारा बनाए गए सभी विजेट्स में माता-पिता हैं।

This का कहना है:

तो माता-पिता 0 है, नया विजेट हो जाता है एक खिड़की। यदि माता-पिता एक और विजेट है, यह विजेट माता-पिता के अंदर एक बाल विंडो बन जाता है। नया विजेट हटा दिया गया है जब उसके माता-पिता को हटा दिया गया है।

उत्तर

20

कोई जादू शामिल नहीं है। सीधे शब्दों में कहें, एक QObject स्वचालित रूप से अपने बच्चों को अपने विनाशक में हटा देता है। इसलिए, जब तक आपके विजेट में माता-पिता हों और आप उस माता-पिता को नष्ट कर दें, आपको बच्चों के बारे में चिंता करने की ज़रूरत नहीं है। तो अगर आपको आश्चर्य हुआ कि QObject * parent पैरामीटर क्या था, तो यह वही है जो इसके लिए है।

इसके अलावा, दस्तावेज़ से:

सभी बच्चे वस्तुओं नष्ट हो जाती हैं। यदि इनमें से कोई भी वस्तु ढेर या वैश्विक पर है, तो जल्दी या बाद में आपका प्रोग्राम क्रैश हो जाएगा।

तो, वस्तुओं है कि स्टैक-आवंटित किए जाते हैं करने के लिए माता-पिता देने से बचें।

+0

धन्यवाद, लेकिन क्या आप एक लिंक प्रदान कर सकते हैं जहां यह कहता है? मैंने खोज करने की कोशिश की, लेकिन इसे खोजने में असफल रहा। –

+0

btw मुझे पहले से ही दुर्घटना का अनुभव हुआ है, इसलिए सवाल :) –

+2

बस QObject के विनाशक के लिए प्रलेखन देखें: http://doc.trolltech.com/4.7/qobject.html#dtor.QObject –

3

इस पर दस्तावेज़ here हैं। ढेर पर आवंटित होने का कारण ऑब्जेक्ट पेड़ के सदस्यों के निर्माण आदेश के कारण होने वाली समस्याओं से बचना है। स्टैक ठीक है जब तक आप नियमों का पालन करते हैं, लेकिन जब आपके पास विश्वसनीय विकल्प होता है तो परेशान क्यों होता है?

संदर्भ @Etienne उद्धृत here है।

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