किसी ऑब्जेक्ट को देखते हुए जिसमें एक चर है जिसके पास इसका स्वामित्व नहीं है; यानी, चर composition के बजाय बना है। क्या एक गहरी प्रतिलिपि ऑपरेशन चर या प्रति लिंक केवल कॉपी करेगा?क्या एक गहरी प्रतिलिपि ऑपरेशन उप-सारणीयों की प्रतिलिपि बनाता है जिनके पास इसका स्वामित्व नहीं है?
उत्तर
मैं अंतर यह है कि तुम यहाँ एक गहरी प्रतिलिपि के संदर्भ में संरचना और एकत्रीकरण की भूमिका के बीच कर रहे हैं पसंद है।
मैं दूसरे उत्तर के खिलाफ जाने जा रहा हूं और कहूंगा: नहीं, किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट की गहरी प्रतिलिपि नहीं लेनी चाहिए, जिसका स्वामित्व नहीं है।
कोई ऑब्जेक्ट की गहरी प्रतिलिपि (कम से कम प्रारंभ में) मूल के समान होने की अपेक्षा करेगा। यदि एक गहरी प्रतिलिपि उस संदर्भ से बनाई गई थी जिसका मूल स्वामित्व नहीं था, तो यह नई प्रतिलिपि के सवाल का खुलासा करता है। अगर क्लोन का मालिक है, तो यह मूल वस्तु के समान नहीं होगा। यह मूल की तरह एक वस्तु होगी, सिवाय इसके कि इसके समेकित सदस्यों में से एक के संदर्भ में इसका मालिक है। यह निश्चित रूप से अराजकता का कारण बन जाएगा। अगर क्लोन का स्वामित्व नहीं है, तो कौन करता है?
गैर-कचरा-एकत्रित भाषाओं में स्वामित्व की यह समस्या विशेष रूप से महत्वपूर्ण है, लेकिन यह कचरा कलेक्टर के साथ भी समस्याएं पैदा करती है। उदाहरण के लिए, यदि क्लोन किसी ऑब्जेक्ट में असामान्य परिवर्तनों को अनुमति देने के लिए बनाया गया है, तो क्या इस अन्य ऑब्जेक्ट पर परिवर्तनों की अनुमति है? यदि परिवर्तन की अनुमति नहीं है, तो इसकी गहरी प्रतिलिपि बनाने का कोई कारण नहीं था। यदि परिवर्तन की अनुमति है, तो उन परिवर्तनों को कैसे किया जा सकता है, क्योंकि संशोधित वस्तु इस संदर्भित वस्तु को नियंत्रित नहीं करती है? निश्चित रूप से, इसके लिए एक तंत्र का विकास किया जा सकता है, लेकिन इसका मतलब यह होगा कि क्लोन ऑब्जेक्ट अपनी जिम्मेदारियों को खत्म कर रहा है, और कार्यक्रम एक रखरखाव दुःस्वप्न होगा।
एक गहरी प्रतिलिपि जिसमें अनजान वस्तुओं को शामिल किया गया है, भी अनंत (या कम से कम अत्यधिक) प्रतिलिपि संचालन की समस्याओं का कारण बनता है। मान लीजिए कि कोई ऑब्जेक्ट संग्रह का हिस्सा है, और आगे मान लें कि ऑब्जेक्ट को संग्रह के संदर्भ की आवश्यकता है। उस ऑब्जेक्ट पर एक बेवकूफ गहरे प्रतिलिपि ऑपरेशन तब संग्रह की एक नई प्रति और उसके प्रत्येक सदस्य को तैयार करेगा। यह भी मानते हुए कि हम अनंत रिकर्सन की समस्या से बचते हैं, और ऑब्जेक्ट्स के इस नए सेट के बीच सभी संदर्भों को सुसंगत रखते हैं, यह अभी भी अधिकांश उद्देश्यों के लिए अत्यधिक है, और उन मामलों के लिए जहां एक नया संग्रह वांछित है, क्या इससे अधिक समझ नहीं आएगी इस उद्देश्य के लिए, अपने सदस्यों में से एक के बजाय संग्रह को गहराई से कॉपी करने के लिए?
मुझे लगता है कि एक गहरी प्रतिलिपि जिसमें स्वामित्व वाली वस्तुएं शामिल हैं, जैसा कि आप सुझाव देते हैं, अधिकांश उद्देश्यों के लिए एकमात्र दृश्य दृष्टिकोण है।
आपकी महान प्रतिक्रिया के लिए धन्यवाद! मुझे गहरा क्लोन बनाने के दौरान विशेष रूप से अनंत रिकर्सन का उदाहरण पसंद है। यह वास्तव में एक ऐसा मामला है जिसके लिए समेकित वस्तुओं को छोड़ने के लिए गहरी प्रतिलिपि की आवश्यकता होती है। –
http://stackoverflow.com/a/12187738/363751 पर इसी तरह के प्रश्न पर मेरा उत्तर कैसा लगता है? – supercat
ओपोजिट में उथले में दीप प्रतिलिपि को पूरी वस्तु को जमीन पर दोबारा प्रतिलिपि बनाना चाहिए और ऑब्जेक्ट की पूरी प्रतिलिपि बनाना और सभी निहित वस्तुओं को बनाना चाहिए।
तो हाँ, यह चर, न केवल लिंक .. कॉपी चाहिए
- 1. क्या SqlCommand.Clone() एक गहरी प्रतिलिपि या उथली प्रतिलिपि बनाता है?
- 2. एक गहरी प्रतिलिपि लिखना - सूचक मूल्य प्रतिलिपि
- 3. क्या एसटीएल कंटेनर पास करना एक प्रतिलिपि बनाता है?
- 4. जेपीए इकाइयों की गहरी प्रतिलिपि
- 5. एक उथली प्रतिलिपि कब वांछित है (एक गहरी प्रतिलिपि के बजाय)?
- 6. ऑब्जेक्ट की विधि की प्रतिलिपि प्रतिलिपि - प्रतिलिपि कौन करता है?
- 7. क्या संख्यात्मक है। दोहराएं() एक गहरी प्रतिलिपि करें?
- 8. क्या कोई बढ़ावा :: फ़ंक्शन की प्रतिलिपि बंद करने की प्रतिलिपि बनाता है?
- 9. क्या स्केल AnyRef.clone एक उथले या गहरी प्रतिलिपि करता है?
- 10. बढ़ावा कैसे देता है :: ptr_vector अंतर्निहित वस्तुओं की गहरी प्रतिलिपि बनाता है?
- 11. पेड़ दृश्य नोड्स की गहरी प्रतिलिपि
- 12. पायथन मल्टीप्रोसेसिंग तर्क: गहरी प्रतिलिपि?
- 13. क्या एरलांग हमेशा एक ही नोड पर प्रक्रियाओं के बीच संदेशों की प्रतिलिपि बनाता है?
- 14. एसवीएन शाखा में ट्रंक की प्रतिलिपि बना रहा है, ट्रंक फ़ोल्डर को प्रतिलिपि बनाता है?
- 15. क्या सरणी पर क्लोन विधि गहरी या उथली प्रतिलिपि है?
- 16. सी प्रोग्रामिंग। एक संरचना की गहरी प्रतिलिपि कैसे करें?
- 17. std :: runtime_error कन्स्ट्रक्टर में पारित स्ट्रिंग की प्रतिलिपि बनाता है?
- 18. क्या @property प्रतिलिपि बनाने के साथ संयोजन में प्रतिलिपि बनाता है?
- 19. क्या फोरच प्रत्येक तत्व की प्रतिलिपि बनाता है यदि यह structs की सरणी है?
- 20. std वेक्टर सी ++ - गहरी या उथली प्रतिलिपि
- 21. क्यूटी 4.5 - क्यूलिस्ट :: क्यूलिस्ट (कॉन्स क्यूलिस्ट और) - क्या यह एक गहरी प्रतिलिपि है?
- 22. पायथन में सूची की प्रतिलिपि: गहरी बनाम उथली प्रतिलिपि: पाइथन में मेरे लिए गोचा?
- 23. प्रतिनिधियों की प्रतिलिपि
- 24. मैं डेटटाइम ऑब्जेक्ट की गहरी प्रतिलिपि कैसे करूं?
- 25. सीयूडीए के साथ संरचना की गहरी प्रतिलिपि कैसे करें?
- 26. स्कैला में 2 डी सरणी की गहरी प्रतिलिपि?
- 27. एचजी प्रतिलिपि क्या करती है?
- 28. क्या कोई प्रोग्राम स्वयं की प्रतिलिपि बना सकता है
- 29. पर्ल में हैश के हैश की गहरी प्रतिलिपि बनाने का सबसे अच्छा तरीका क्या है?
- 30. पर्ल में डेटा संरचना की गहरी प्रतिलिपि बनाने का सबसे अच्छा तरीका क्या है?
शायद यह पर्याप्त गहरी/उथली प्रतिलिपि प्रश्न है - जब तक कि आप अपनी शर्तों को और अधिक स्पष्ट रूप से परिभाषित करने के लिए तैयार नहीं होते हैं। –
@ नील बटरवर्थ: वास्तव में, यह वही है जो मैं सीखना चाहता हूं। मुझे लगता है कि गहरी और उथली प्रतिलिपि कम परिभाषित शर्तों हैं। मेरे मूल प्रश्न के जवाब में [कॉपी कन्स्ट्रक्टर बनाम क्लोन] (http://stackoverflow.com/questions/3345389/copy-constructor-versus-clone) सभी सहमत हैं कि यह एक महत्वपूर्ण अंतर है, हालांकि मुझे लगता है कि केवल एक ही है आमतौर पर उपयोगी वस्तुओं की प्रतिलिपि बनाने का एक तरीका। यही कारण है कि मैंने "गहरी प्रति" और "उथली प्रतिलिपि" द्वारा सामान्य रूप से क्या समझा जाता है, उसके बाद मैंने एक छोटी सी जांच शुरू की। –