2013-03-31 14 views
6

मेरे खेल इंजन में के माध्यम से स्वामित्व का प्रतिनिधित्व करते हुए, वहाँ तीन वर्गों रहे हैं।सी ++ संकेत

enter image description here

EntityVehicleके उदाहरण EntityCharacter की ओर इशारा साथ सीट ऑब्जेक्ट सम्मिलित हैं। यदि सीट ऑब्जेक्ट का लक्ष्य वर्ण इकाई पॉइंटर एक शून्य सूचक है, तो उस विशिष्ट सीट ऑब्जेक्ट पर कोई भी चरित्र नहीं बैठता है। एंटिटी कैरेक्टर-क्लास इंस्टेंस में सीट ऑब्जेक्ट्स के पॉइंटर्स भी हैं, जो इंगित करते हैं कि क्या इन चरित्र इकाइयां कुछ वाहनों में बैठे हैं या नहीं।

EntityCharacter -> EntityVehicleSeat 
EntityCharacter <- EntityVehicleSeat 

इस तरह हम दोनों चरित्र और वाहन इकाई के माध्यम से इस स्वामित्व की जांच कर सकते हैं:

दूसरे शब्दों में, EntityCharacter स्तरीय उदाहरण EntityVehicleSeat के लिए सूचक और दूसरी तरह के आसपास है।

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

enter image description here

एक स्वामित्व sophisticatedly इस तरह का कैसे प्रतिनिधित्व कर सकते हैं? इस तथ्य के बारे में अन्य वस्तु को कैसे सूचित किया जा सकता है कि अन्य ऑब्जेक्ट अब मौजूद नहीं है?

+0

नाशक पर उपयोग अधिसूचना। – Yousf

+0

क्या आप अन्य ऑब्जेक्ट को सूचित करने के लिए विनाशक का उपयोग कर सकते हैं? –

+0

क्या यह सिर्फ 1: 1 रिश्ते है? – Potatoswatter

उत्तर

4

वस्तु-टू-वस्तु द्विदिश सहित संबंधों के प्रबंधन, वह जगह है जहाँ विनाशकर्ता उपयोगी हो जाते हैं। आप इस तरह झूलने संकेत की समस्या को खत्म कर सकते हैं: इस दृष्टिकोण के साथ

~EntityCharacter() { 
    // Do some other cleanup... 
    ... 
    if (seatPtr) { 
     assert(seatPtr->characterPtr == this); // That's my seat! 
     seatPtr->characterPtr = NULL; 
    } 
} 

~ EntityVehicleSeat() { 
    // Do some other cleanup... 
    ... 
    if (characterPtr) { 
     assert(characterPtr->seatPtr == this); // That's my character! 
     characterPtr->seatPtr = NULL; 
    } 
} 

एक समस्या यह है संगामिति है: अगर एक सीट और एक चरित्र अलग धागे से एक साथ हटाया जा सकता है, तो आप विलोपन सिंक्रनाइज़ करने के लिए की आवश्यकता होगी।

+0

इतना आसान अभी तक आसान है। आपका बहुत बहुत धन्यवाद! – Helixirr

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