मैं जावा में डैग्नोड क्लास लिखने की कोशिश कर रहा हूं जिससे दो नोड्स तार्किक रूप से बराबर हैं अगर वे संदर्भ के बराबर हैं।जावा में स्मार्ट पॉइंटर्स और रेफ गिनती
C++ — विचार (मैं सी से हूँ ++) — स्मार्ट संकेत और संदर्भ गिनती उपयोग करने के लिए होगा:
जब एक नोड बनाई गई है, मैं अगर है कि कुछ तालिका में ढूंढ निकालेंगे नोड पहले से मौजूद है। यदि ऐसा है, तो मैं एक पॉइंटर को पुराने में वापस कर दूंगा। अन्यथा, नया नोड बनाओ।
अतिभारित सी ++ प्रतिलिपि निर्माणकर्ता और विनाशकर्ता की तरह तरीकों रेफरी की गिनती करना होगा, और जब एक नोड के रेफरी गिनती करने के लिए 0 चला जाता है, नोड उपर्युक्त तालिका से बेदखल कर दिया है। (सी ++ भी स्मृति को मुक्त करेगा।)
हालांकि, जावा में स्वचालित रूप से गिनती करने का कोई तरीका नहीं लगता है। मुझे टेबल से नोड को बेदखल करने के बारे में जानने के लिए फिर से गिनने की आवश्यकता होगी (ताकि यह कचरा एकत्र किया जा सके), और मैं वास्तव में प्रत्येक समारोह के प्रारंभ और अंत में node->incRef()
और node->decRef()
पर कॉल करना से बचना चाहता हूं।
हम जावा में यह सी ++ मुहावरे कैसे करते हैं?
जावा में संदर्भ-गणना स्वचालित नहीं है - जावा जीसी संदर्भ-गणना पर निर्भर नहीं है। –
मुझे यह सुनिश्चित करने के लिए मुझे यह दोबारा दोहराने की अनुमति दें कि मैं समझता हूं। असल में मेरे पास वीक रेफरेंस की एक सारणी है और संदर्भक्यू का बिंदु तालिका से वीक रेफरेंस को बेदखल करना है जब इसे जीसीएड किया जाता है। तालिका में कमजोर होने का मतलब है कि यह अभी भी जीसीएड हो सकता है, लेकिन यदि स्टैक पर या किसी अन्य ऑब्जेक्ट में नियमित संदर्भ है तो यह जीसीडी नहीं हो सकता है। और ReferenceQueue सुनिश्चित करता है कि तालिका से बेदखल कचरा संग्रह से पहले होता है, इसलिए सब कुछ अच्छा है। –
यह एक आश्चर्यजनक रूप से सुरुचिपूर्ण समाधान है! ऐसा अक्सर नहीं होता है कि मैं जावा से प्रभावित हूं। –