2011-08-14 9 views
5

को दर्शाता है चलो कहते हैं कि मैं इस तरह एक वर्ग करते हैं:समझने में सहायता चाहिए कैसे luabind कक्षाएं

class A 
{ 
public: 
A(){} 
~A(){} 
}; 

और इस तरह Luabind के माध्यम से लुआ को यह बेनकाब:

module(luaState) 
    [ 
     class_<A>("Foo") 
     .def(constructor<>()) 
    ]; 

और अंत में एक स्क्रिप्ट में यह दृष्टांत इस तरह:

A = Foo(); 

उस समय ए के वास्तविक 'अस्तित्व की स्थिति' क्या है?

क्या यह कहीं ढेर में है, और लुआ इसे कहीं संदर्भित करता है? (या एक लुबाइंड :: ऑब्जेक्ट?)

मुझे यह महसूस हो रहा है कि यह केवल एक सूचक हो सकता है, जैसा कि नए या समकक्ष द्वारा आवंटित किया गया है।

हालांकि, मैं उन कार्यों को बाध्य कर सकता हूं जो संदर्भ स्वीकार करते हैं, जैसे lua_doSomething(A & a) और वहां क्या होता है एक वास्तविक संदर्भ होगा। अनुमोदित मुझे पता है कि यह बहुत अच्छा हो सकता है a*a के रूप में गुजरने के लिए, लेकिन मुझे नहीं पता कि ऐसा कैसे होता है।

कारण मैं यह पूछ रहा हूं कि स्क्रिप्ट में तुरंत बेहतर ऑब्जेक्ट्स के जीवनकाल को समझना और भविष्यवाणी करना है।

यही कारण है, और मुझे अनिश्चित जा रहा है, तो स्वामित्व या जीवन काल के बजाय ऊपर की तरह लुआ को वर्ग उजागर की है, अगर बदलने के लिए, मैं इसे इस तरह कार्य करें:

A * lua_CreateA() 
{ 
return new A(); 
} 

module(luaState) 
    [ 
     class_<A>("Foo") 
    ]; 


module(luaState) 
    [ 

    def("createA",&lua_CreateA) 

    ]; 

और

A = createA(); 
की तरह इसे का उपयोग

तर्क से मैं अब तक समझता हूं, इस मामले में मुझे सफाई करने की आवश्यकता होगी क्योंकि मैं एक नई वस्तु आवंटित कर रहा हूं, जब तक कि लुबाइंड के लिए ऐसा असाइनमेंट बाध्य कन्स्ट्रक्टर के साथ ऐसा ही नहीं होगा।

संक्षेप में, मैं वास्तव में वास्तव में वस्तु जीवन और सामान यहाँ लेकर संदेह में हूँ ... मैं इस से संबंधित खोजशब्दों के लिए googled, लेकिन मैं केवल तरह http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/

सामान मिल रहा है कौन सा नहीं है वास्तव में मैं क्या जानना चाहता हूँ। मैं कंक्रीट तरीके को समझना चाहता हूं कि आवंटन, तत्कालता, जीवनकाल और उसके बारे में दृश्यों के पीछे चीजों को कैसे नियंत्रित किया जाता है।

उत्तर

5

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

लुआ लूआ द्वारा बनाई गई वस्तुओं का मालिक है। तो यदि आप लुआ में कन्स्ट्रक्टर सिंटैक्स के साथ ऑब्जेक्ट आवंटित करते हैं, तो उस ऑब्जेक्ट का स्वामित्व लुआ है। जब लुआ में ऑब्जेक्ट का संदर्भ नहीं दिया जाता है, तो लुआ जीसी इसे इकट्ठा करेगा।

यदि लुआ किसी अन्य माध्यम से किसी ऑब्जेक्ट का संदर्भ प्राप्त करता है, तो लुआ नहीं है जब तक कि आप विशेष रूप से लुबाइंड की गोद लेने वाली नीति का उपयोग करके स्वामित्व स्थानांतरित नहीं करते हैं। इसलिए, यदि आप ऐसे फ़ंक्शन को बाध्य कर रहे हैं जो लुआ को ऑब्जेक्ट देता है, तो अब आप लूआ को यह तय करने की उम्मीद करते हैं कि वह ऑब्जेक्ट जिंदा है या नहीं, तो आपको अपनाने की नीति का उपयोग करने की आवश्यकता है।

अंतिम अनुच्छेद केवल वास्तविक संदर्भों (लौटने वाले पॉइंटर्स और संदर्भ प्रकार) पर लागू होता है। यदि लुआ को किसी ऑब्जेक्ट की कॉपी (गैर-संदर्भ या सूचक वापसी मान के माध्यम से) दिया गया है, तो लुआ ऑब्जेक्ट की प्रति कॉपी करेगा।