2009-07-12 18 views
6

ठीक है, यहां एक समस्या है जो मेरे पास है।लू बाइंडिंग्स सी ++ और कचरा संग्रह

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

मैं SWIG के साथ लुआ बाइंडिंग उत्पन्न कर रहा हूं।

उत्तर

9

लुआ को किसी ऑब्जेक्ट को इकट्ठा करने से रोकने के लिए एक आसान तरीका है कि उस ऑब्जेक्ट को एक टेबल में रखें (इसे uncollectable पर कॉल करें) और फिर उस तालिका को लुआ रजिस्ट्री में डालने के लिए।

आपका दूसरा विकल्प प्रत्येक लुआ ऑब्जेक्ट के साथ एक अतिरिक्त स्तर के संकेत का उपयोग करना है, यानी, "हल्का उपयोगकर्ता डेटा" का उपयोग करें। प्रकाश उपयोगकर्ता डेटा सी ++ ऑब्जेक्ट के लिए पॉइंटर को इंगित करता है, और यहां तक ​​कि अगर प्रकाश उपयोगकर्ता डेटा एकत्र किया जाता है, तो अंतर्निहित वस्तु बेकार रहती है।

ये स्पष्टीकरण काफी terse हैं, लेकिन मुझे Programming in Lua की मदद से उम्मीद है, आप एक को काम कोड में बदल सकते हैं।

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