2012-04-06 11 views
8

संदर्भ गणना वास्तव में क्या है? विशेष रूप से, सी ++ के लिए यह क्या है? अगर हम उन्हें संभाल नहीं पाते हैं तो हमें क्या समस्याएं आ सकती हैं? क्या सभी भाषाओं को संदर्भ गिनती की आवश्यकता है?सी ++ में वास्तव में संदर्भ गणना क्या है ?,

+2

पढ़ना शुरू करें [यहां] (http://www.gotw.ca/gotw/043.htm)। – Xeo

+1

"संदर्भ गणना एक सामान्य अनुकूलन है (जिसे" आलसी प्रति "और" लिखने पर प्रतिलिपि "भी कहा जाता है)।" - हर्ब सटर। WTF? संदर्भ गिनती निश्चित रूप से * आलसी प्रति "या" लिखने पर प्रतिलिपि "जैसी नहीं है। स्मृति प्रबंधन के लिए संदर्भ गणना (आमतौर पर) है। यह प्रति अनुकूलन नहीं है। –

+0

[संदर्भ गणना पर विकिपीडिया पृष्ठ] (http://en.wikipedia.org/wiki/Reference_counting) विषय के लिए एक बहुत अच्छा परिचय है। –

उत्तर

0

संदर्भ-गणना कचरा संग्रह स्मृति प्रबंधन के लिए एक शक्तिशाली तकनीक है जो वस्तुओं को गलती से या एक से अधिक बार हटाने से रोकने में मदद करती है। तकनीक सी ++ कोड तक सीमित नहीं है और, इसके नाम के बावजूद, संदर्भ चर के सी ++ अवधारणा से असंबंधित है। इसके बजाय, शब्द का अर्थ है कि हम किसी ऑब्जेक्ट में सभी 'स्वामित्व संदर्भ' 'की गिनती बनाए रखते हैं और जब यह गणना शून्य हो जाती है तो ऑब्जेक्ट को हटा दें।

1

संदर्भ गणना एक कचरा पहचान के लिए एक सरल लेकिन पूर्ण दृष्टिकोण नहीं है।

जब काउंटर शून्य तक पहुंच जाता है, तो आप उस ऑब्जेक्ट को छोड़ सकते हैं।

लेकिन अगर कोई अधिक इस्तेमाल वस्तुओं जो एक दूसरे चक्रीय संदर्भित कर रहे हैं, वे जारी किया जाएगा कभी नहीं किया

, एक संदर्भ ख पर विचार करें संदर्भ एक ख है, लेकिन कुछ नहीं संदर्भ एक या बी। संदर्भ ए और बी पर भरोसा अभी भी 1 (= उपयोग में)

+2

कड़ाई से बोलते हुए, जब आप संदर्भित गिनती संसाधन होते हैं, तो आप "कचरा संग्रहण" नहीं होते हैं, क्योंकि कोई कचरा नहीं होता है। कचरा वह है जिसे आप * प्राप्त करते हैं * सभी संदर्भ खो गए हैं। सी ++ आम तौर पर कचरा नहीं पैदा करता है। (सी ++ * प्रोग्रामर * के विपरीत, शायद।) –

+0

ठीक है, यही कारण है कि मैंने कचरा शब्द –

+0

शब्द का उपयोग किया है, हालांकि यह "कचरा" नहीं है! –

-2

संदर्भ गणना - एक रूपक का उपयोग करने देता है।

आपके पास कान है। आप इसे किसी बिंदु पर वापस चाहते हैं।

आपको अपने कान पर इशारा करते हुए लोगों का एक समूह मिलता है। जैसे ही वे इंगित करते हैं आप उन्हें गिनते हैं।

जब संख्या शून्य हो जाती है - यह केवल तुम्हारा है और आप चाहें तो इसके साथ कर सकते हैं।

आईई। इसे समीकरण से बाहर ले जाएं (इसे वापस स्मृति में मुक्त करें)।

बीटीडब्ल्यू। सर्कुलर सामान स्पॉट करने के लिए मुश्किल है।

+3

"आपके पास कान है। आप इसे किसी बिंदु पर वापस चाहते हैं।" खैर, मेरे पास पहले से ही है, इसे वापस पाने की आवश्यकता नहीं है। यह भी मेरा कान है जब एक दर्जन लोग इसे इंगित करते हैं। दोषपूर्ण रूपक। – Evert

7

संदर्भ गणना क्या है? विशेष रूप से, सी ++ के लिए यह क्या है?

सरल शब्दों में, संदर्भ गणना का मतलब किसी ऑब्जेक्ट के संदर्भों की गणना करना है।

आमतौर पर, सी ++ RAII की तकनीक को नियोजित करता है। जिसमें, किसी ऑब्जेक्ट के विलोपन को प्रबंधित करने की क्षमता प्रकार ऑब्जेक्ट के भीतर ही बंधी हुई है। इसका मतलब है कि उपयोगकर्ता को ऑब्जेक्ट के जीवनकाल को स्पष्ट रूप से प्रबंधित करने और स्पष्ट रूप से इसके वितरण को प्रबंधित करने की आवश्यकता नहीं है, इस प्रबंधन को करने की कार्यक्षमता ऑब्जेक्ट में ही बनाई गई है।

यह कार्यक्षमता का अर्थ है कि ऑब्जेक्ट मौजूद होना चाहिए और तब तक वैध रहना चाहिए जब तक ऑब्जेक्ट को संदर्भित करने वाले हितधारक नहीं हैं, और यह संदर्भ गणना द्वारा हासिल किया जाता है। जब भी ऑब्जेक्ट को प्रतिबिंबित किया जाता है (प्रतिलिपि) संदर्भ गणना (आमतौर पर कक्षा प्रकार के अंदर एक सदस्य) बढ़ाया जाता है और जब भी विनाशक को गिनती कहा जाता है तो गणना घट जाती है, जब गिनती 0 तक पहुंच जाती है, तो ऑब्जेक्ट को किसी और द्वारा अस्वीकार नहीं किया जा रहा है अपने जीवनकाल के अंत को चिह्नित करता है और इसलिए इसे नष्ट कर दिया जाता है।

अगर हम उन्हें संभाल नहीं पाते हैं तो हमें क्या समस्याएं आ सकती हैं?

इसका मतलब यह नहीं होगा कि आरएआईआई, और अंतहीन और अक्सर दोषपूर्ण मैनुअल संसाधन प्रबंधन।
लघु प्रोग्रामिंग दुःस्वप्न में।

क्या सभी भाषाओं को संदर्भ गणना की आवश्यकता है?

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

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