क्या कोई सरल, कुशल कमजोर/संरक्षित पॉइंटर है? मुझे एक ही ऑब्जेक्ट पर एकाधिक पॉइंटर्स चाहिए जो ऑब्जेक्ट हटा दिए जाने पर सभी स्वचालित रूप से NULL पर सेट हो जाते हैं। एक "मास्टर" पॉइंटर होता है जिसे ऑब्जेक्ट को हटाने के लिए हमेशा उपयोग किया जाता है, लेकिन कई अन्य पॉइंटर्स हो सकते हैं जो एक ही ऑब्जेक्ट को संदर्भित करते हैं।सरल, कुशल कमजोर पॉइंटर जो लक्ष्य स्मृति को हटा दिया जाता है जब NULL पर सेट किया जाता है
यहाँ कुछ समाधान है कि काफी मेरी जरूरतों से मेल नहीं खाते हैं:
- QPointer: मैं एक क्यूटी एप्लिकेशन विकसित करने नहीं कर रहा हूँ; मैं QObject से यह libary/derive शामिल नहीं करना चाहता।
- boost::weak_ptr:
एक हटाए गए ऑब्जेक्ट तक पहुंचने पर अपवाद फेंक दिया जाता है। मेरी स्थिति के लिए बहुत महंगा: कमजोर सूचक का परीक्षण करना सामान्य होना चाहिए; जब कोई कमजोर सूचक अब मान्य नहीं होता है तो मैं कुछ मैन्युअल क्लीन-अप करने की योजना बना रहा हूं।अद्यतन: weak_ptr फेंक अपवाद - Low-Overhead Weak Pointers बिना परीक्षण किया जा सकता: यह बहुत है कि मैं क्या देख रहा हूँ के करीब है, सिवाय मैं इस तथ्य "यह योजना केवल जब तक आप डॉन 'के रूप में काम करने के लिए गारंटी है पसंद नहीं है टी एक ही स्थान पर 2 ** आकार (int) बार आवंटित करें। "
क्यों मैं इन कमजोर/पहरा संकेत की जरूरत है: मैं खेल वस्तुओं की एक सूची के साथ एक खेल है। कुछ वस्तुएं दूसरों पर निर्भर होती हैं, उदाहरण के लिए एक डीबग/आंकड़े ऑब्जेक्ट जो गेम इकाई से जुड़ा होता है। डीबग/स्टेटस ऑब्जेक्ट गेम इकाई के बारे में उपयोगी जानकारी प्रदर्शित करता है, लेकिन गेम इकाई मौजूद होने पर यह केवल समझ में आता है। इसलिए यदि गेम इकाई हटा दी जाती है, तो डीबग/आंकड़े ऑब्जेक्ट को इसका एहसास होना चाहिए और खुद को हटा देना चाहिए। (एक और विचार एक ट्रैकिंग मिसाइल है: खुद को हटाने के बजाय, यह एक नया लक्ष्य खोज सकता है।)
मैं डीबग/आंकड़े तर्क को खेल इकाई से अलग रखना चाहता हूं। खेल इकाई को यह जानना नहीं चाहिए कि डीबग/आंकड़े ऑब्जेक्ट उससे जुड़ा हुआ है। जबकि मैं कमजोर/संरक्षित पॉइंटर्स के लिए एक उत्तर पसंद करूंगा, मैं अपने विशिष्ट कार्य तक पहुंचने के विभिन्न तरीकों का भी स्वागत करता हूं। मुझे लगता है कि मुझे game object manager लागू करना पड़ सकता है जो ऑब्जेक्ट लाइफटाइम ट्रैक करता है और कच्चे पॉइंटर्स के बजाय मेमोरी पतों पर हैंडल का उपयोग करता है।
मैं सी ++ में विकास कर रहा हूं।
एक सामान्य प्रश्न होगा, "क्या एक खेल विकसित करने के लिए क्यूटी सही विकल्प है?" –
बूस्ट का कमजोर पॉइंटर आपको यह जांचने की अनुमति देता है कि यह मान्य है या नहीं। यह केवल अपवाद फेंकता है यदि आप सीधे इसे अस्वीकार करने का प्रयास करते हैं - यदि आप एक शून्य सूचक को हटाना चाहते हैं तो क्या होता है। – jalf
सी ++ 11 में ['std :: weak_ptr'] है (http://en.cppreference.com/w/cpp/memory/weak_ptr)। बूस्ट से एक जैसा दिखता है। – Palec