दोनों लिखने पर कॉपी और ले जाने के अर्थ विज्ञान वस्तुओं है कि ढेर पर अपने डेटा पकड़ का मूल्य अर्थ विज्ञान का अनुकूलन करने के लिए इस्तेमाल किया गया है। std::string
, उदाहरण के लिए एक कॉपी-ऑन-राइट ऑब्जेक्ट, और एक चाल-सक्षम ऑब्जेक्ट के रूप में लागू किया गया है।
तो कॉपी-ऑन-राइट और सेमेन्टिक्स को स्थानांतरित करना इसी संबंध में समान है: यदि आप "प्रतिलिपि" को पर्याप्त रूप से परिभाषित करते हैं तो उन्हें दोनों "प्रतियां" अनुकूलित करने के लिए उपयोग किया जा सकता है। मैंने कभी-कभी संदर्भ अर्थ गणना के साथ कॉपी-ऑन-राइट को 0 या 1 तक सीमित किया है, और इस प्रकार संदर्भ गणना वाले क्षेत्र को अनुकूलित किया गया है।
एसटीडी में कंटेनरों की सभी :: lib अब चाल अर्थ विज्ञान का उपयोग करें और यहां तक कि std::string
है, जो प्रति-ऑन-राइट का उपयोग करने की अनुमति दी जानी थी, अब ऐसा करने से मना किया है। अगर मैं आज एक नया ग्राहक कंटेनर लिख रहा था, तो मैं कॉपी-ऑन-राइट चुनने से पहले मूव सेमेन्टिक्स का उपयोग करूंगा।
अभी भी कॉपी-ऑन-लिखने में सी ++ 11 के लिए एक प्रयोग है। यदि आप उम्मीद करते हैं कि आपकी डेटा संरचना को शायद ही कभी लिखा जा सकता है, लेकिन अक्सर प्रतिलिपि बनाई जाती है, वही मूल्य की प्रतियां रखने वाले कई ग्राहकों के साथ, कॉपी-ऑन-राइट अभी भी एक बड़ी जीत हो सकती है।
उदाहरण के लिए मैंने देखा है कॉपी-ऑन-लिखना अच्छा इस्तेमाल किया एक जटिल दस्तावेज़ के लिए एक पूर्ववत्-सूची धारण करने के लिए। किसी दिए गए प्रतिबद्धता (जहां आप राज्य को सहेजना चाहते हैं) पर, अंतिम प्रतिबद्धता के बाद से बड़े दस्तावेज़ का केवल एक छोटा टुकड़ा बदल गया है। इसलिए अपने राज्य को बचाने के लिए दस्तावेज़ की एक प्रति बनाने का मतलब है संदर्भ संख्याओं का एक समूह अद्यतन करना, और वास्तव में परिवर्तन (प्रतिलिपि-लेखन-शैली) को एक छोटे टुकड़े में बनाना।
स्रोत
2013-04-18 21:52:05
उदाहरण में कॉपी-ऑन-राइट सेमेन्टिक्स को भरना संभव होगा एक आवंटक? निश्चित रूप से आवश्यक होने पर आवंटक का उपयोग करने के लिए इंटरफ़ेस फ़ंक्शंस को संशोधित करके। मुझे संदेह है कि std :: आवंटक के पास आवश्यक इंटरफ़ेस है हालांकि? – rubenvb