मैं अपने डिजाइन में पॉइंटर-टू-पॉइंटर का उपयोग करने के लिए अपने खेल के कुछ स्थानों पर खुद को ढूंढता हूं। उदाहरण के लिए, मेरे पास कक्षा OpenGLRenderer
है जो मेटेस दिए गए वर्टेक्स/इंडिस/टेक्सकोर्ड डेटा, सामग्री प्रोप इत्यादि सामग्री और फिर एक वर्ग ResourceManifest
बनाता है जो फाइल से मेष/सामग्री को कैश करता है और इन संसाधनों में से किसी एक को लोड करने पर इसका एक उदाहरण बनाता है OpenGLRenderer
का उपयोग कर। तो वहां एक युग्मन है।सी ++ में पॉइंटर-टू-पॉइंटर्स के विकल्प?
मैं आम तौर पर जब कोडिंग जो निम्नलिखित रिश्ते के लिए मुझे लुभाता है आरए II डिजाइन को रोजगार चाहते:
ResourceManifest(OpenGLRenderer** renderer);
क्योंकि जब ओपन संदर्भ में तोड़ दिया गया और सभी ओपन राज्य विशेष के सामान इसे पुनः शुरू करना है, इस तरह के की जरूरत है जब खिड़की को पुनर्जीवित करते हैं, तो मैं सिर्फ OpenGLRenderer
को फिर से बना देता हूं और कन्स्ट्रक्टर/विनाशक को सभी काम करता है और ResourceManifest
इसका उपयोग कभी भी बुद्धिमान नहीं होगा।
मुझे क्या आश्चर्य है कि अगर यह सादे पुराने पॉइंटर-टू-पॉइंटर्स का उपयोग करने के पर्याप्त औचित्य है, तो क्या कोई और आधुनिक उपकरण या तकनीक उपलब्ध है? उदाहरण के लिए मैं विभिन्न smart_ptrs देख रहा हूं, लेकिन वे समस्या से निपट नहीं पाते हैं, क्योंकि मैं नए smart_ptrs को पार किए बिना प्रबंधित ऑब्जेक्ट को फिर से बनाना चाहता हूं।
आपके पास स्मार्ट पॉइंटर के लिए एक स्मार्ट पॉइंटर हो सकता है। –
यह एक भयानक हैक हो सकता है, इसलिए मैं केवल एक टिप्पणी के रूप में पोस्ट कर रहा हूं; क्या आप OpenGLRenderer को प्लेसमेंट नए और एक स्पष्ट डॉटोर कॉल के साथ पुन: आवंटित कर सकते हैं, जिससे स्मृति पता लगातार स्थिर रहेगा? (अस्वीकरण: मैं कुल ग्राफिक्स-नोब हूं) – bitmask
एआरएम, एक संदर्भ-से-पॉइंटर बहुत स्पष्ट उत्तर है? वैकल्पिक रूप से, एक रैपर प्रकार का उपयोग करें और उस रैपर के उदाहरण के लिए एक संदर्भ या सूचक संग्रहीत करें, और रैपर के 'OpenGLRenderer * 'सदस्य को एक अलग रेंडरर –