मैं सोच रहा हूं कि कॉपी-ऑन-राइट में क्या संभावित गुण हैं? स्वाभाविक रूप से, मैं व्यक्तिगत राय की उम्मीद नहीं करता, लेकिन वास्तविक दुनिया के व्यावहारिक परिदृश्य जहां यह तकनीकी और व्यावहारिक रूप से एक लाभप्रद तरीके से फायदेमंद हो सकता है। और मूर्त द्वारा मेरा मतलब है कि आप एक &
चरित्र के प्रकार को बचाने से अधिक कुछ कर सकते हैं ।
स्पष्ट करने के लिए, यह प्रश्न डेटाटाइप्स के संदर्भ में है, जहां असाइनमेंट या कॉपी निर्माण एक अंतर्निहित उथले प्रतिलिपि बनाता है, लेकिन इसमें संशोधन एक अंतर्निहित गहरी प्रतिलिपि बनाता है और मूल वस्तु के बजाय इसमें परिवर्तन लागू करता है।
कारण मैं पूछ रहा हूँ मैं एक डिफ़ॉल्ट अंतर्निहित व्यवहार के रूप में गाय होने के किसी भी गुण नहीं मिल रहा है। मैं क्यूटी का उपयोग करता हूं, जो बहुत सारे डेटाैटिप के लिए कार्यान्वित किया गया है, व्यावहारिक रूप से सभी जो कुछ अंतर्निहित गतिशील रूप से आवंटित भंडारण हैं। लेकिन यह वास्तव में उपयोगकर्ता को कैसे लाभ देता है?
एक उदाहरण:
QString s("some text");
QString s1 = s; // now both s and s1 internally use the same resource
qDebug() << s1; // const operation, nothing changes
s1[o] = z; // s1 "detaches" from s, allocates new storage and modifies first character
// s is still "some text"
इस उदाहरण में गाय का उपयोग करके हम क्या जीतते हैं?
अगर हम सब करना चाहते हैं तो कांस्ट ऑपरेशन का उपयोग करें, s1
बेमानी है, साथ ही साथ उपयोग कर सकते हैं s
।
यदि हम मान को बदलने का इरादा रखते हैं, तो गाय केवल पहले गैर-कॉन्स्टेबल ऑपरेशन तक संसाधन प्रतिलिपि को विलंबित करती है, (यद्यपि न्यूनतम) अंतर्निहित शेयरिंग के लिए रेफरी की गिनती बढ़ाने और साझा भंडारण से अलग करने की लागत। ऐसा लगता है कि गाय में शामिल सभी उपरि व्यर्थ है।
यह पैरामीटर पासिंग के संदर्भ में बहुत अलग नहीं है - यदि आप मान को संशोधित करने का इरादा नहीं रखते हैं, तो कॉन्स्ट संदर्भ के रूप में पास करें, यदि आप संशोधित करना चाहते हैं, तो आप या तो एक अंतर्निहित गहरी प्रतिलिपि बनाते हैं यदि आप संशोधित नहीं करना चाहते हैं यदि आप इसे संशोधित करना चाहते हैं, तो मूल ऑब्जेक्ट, या संदर्भ द्वारा पास करें। फिर से गाय अनावश्यक जरूरत की तरह लगता है कि कुछ भी हासिल नहीं करता है, और केवल एक सीमा जोड़ता है कि आप मूल मूल्य को संशोधित नहीं कर सकते हैं, भले ही आप चाहें, क्योंकि कोई भी बदलाव मूल वस्तु से अलग हो जाएगा।
तो क्या आप गाय के बारे में जानते हैं या उससे बेखबर हैं, इसके आधार पर, यह या तो अस्पष्ट इरादे और अनावश्यक उपरि के साथ कोड में हो सकता है, या पूरी तरह से भ्रमित व्यवहार जो अपेक्षाओं से मेल नहीं खाता है और आपके सिर को छोड़ देता है।
मेरे लिए ऐसा लगता है कि अधिक कुशल और अधिक पठनीय समाधान हैं चाहे आप एक अनावश्यक गहरी प्रतिलिपि से बचना चाहते हैं, या आप एक बनाने का इरादा रखते हैं। तो गाय से व्यावहारिक लाभ कहां है? मुझे लगता है कि इस तरह के एक लोकप्रिय और शक्तिशाली ढांचे में इस्तेमाल होने के बाद से कुछ लाभ होना चाहिए।
इसके अलावा, मैंने जो पढ़ा है, उससे अब C ++ मानक पुस्तकालय में स्पष्ट रूप से मना किया गया है। नहीं जानते कि क्या मैं इसे देखता हूं, इसके साथ कुछ करना है, लेकिन या तो इसके लिए कोई कारण होना चाहिए।
[]
ऑपरेटर का उपयोग करें । इसलिए गाय खराब डिज़ाइन को सक्षम करता है - जो कि एक लाभ की तरह नहीं लगता है :) अंतिम पैराग्राफ में बिंदु मान्य लगता है, लेकिन मैं खुद निहित व्यवहार का बहुत बड़ा प्रशंसक नहीं हूं - लोग इसे लेने के लिए तैयार हैं, और फिर एक कठिन समय यह पता लगाने में क्यों कोड अपेक्षित के रूप में काम नहीं करता है, और जब तक वे अंतर्निहित व्यवहार के पीछे छिपा हुआ है, यह जांचने के लिए सोचता रहता है।