2010-07-28 14 views
5

किसी ऑब्जेक्ट को देखते हुए जिसमें एक चर है जिसके पास इसका स्वामित्व नहीं है; यानी, चर composition के बजाय बना है। क्या एक गहरी प्रतिलिपि ऑपरेशन चर या प्रति लिंक केवल कॉपी करेगा?क्या एक गहरी प्रतिलिपि ऑपरेशन उप-सारणीयों की प्रतिलिपि बनाता है जिनके पास इसका स्वामित्व नहीं है?

+0

शायद यह पर्याप्त गहरी/उथली प्रतिलिपि प्रश्न है - जब तक कि आप अपनी शर्तों को और अधिक स्पष्ट रूप से परिभाषित करने के लिए तैयार नहीं होते हैं। –

+0

@ नील बटरवर्थ: वास्तव में, यह वही है जो मैं सीखना चाहता हूं। मुझे लगता है कि गहरी और उथली प्रतिलिपि कम परिभाषित शर्तों हैं। मेरे मूल प्रश्न के जवाब में [कॉपी कन्स्ट्रक्टर बनाम क्लोन] (http://stackoverflow.com/questions/3345389/copy-constructor-versus-clone) सभी सहमत हैं कि यह एक महत्वपूर्ण अंतर है, हालांकि मुझे लगता है कि केवल एक ही है आमतौर पर उपयोगी वस्तुओं की प्रतिलिपि बनाने का एक तरीका। यही कारण है कि मैंने "गहरी प्रति" और "उथली प्रतिलिपि" द्वारा सामान्य रूप से क्या समझा जाता है, उसके बाद मैंने एक छोटी सी जांच शुरू की। –

उत्तर

4

मैं अंतर यह है कि तुम यहाँ एक गहरी प्रतिलिपि के संदर्भ में संरचना और एकत्रीकरण की भूमिका के बीच कर रहे हैं पसंद है।

मैं दूसरे उत्तर के खिलाफ जाने जा रहा हूं और कहूंगा: नहीं, किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट की गहरी प्रतिलिपि नहीं लेनी चाहिए, जिसका स्वामित्व नहीं है।

कोई ऑब्जेक्ट की गहरी प्रतिलिपि (कम से कम प्रारंभ में) मूल के समान होने की अपेक्षा करेगा। यदि एक गहरी प्रतिलिपि उस संदर्भ से बनाई गई थी जिसका मूल स्वामित्व नहीं था, तो यह नई प्रतिलिपि के सवाल का खुलासा करता है। अगर क्लोन का मालिक है, तो यह मूल वस्तु के समान नहीं होगा। यह मूल की तरह एक वस्तु होगी, सिवाय इसके कि इसके समेकित सदस्यों में से एक के संदर्भ में इसका मालिक है। यह निश्चित रूप से अराजकता का कारण बन जाएगा। अगर क्लोन का स्वामित्व नहीं है, तो कौन करता है?

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

एक गहरी प्रतिलिपि जिसमें अनजान वस्तुओं को शामिल किया गया है, भी अनंत (या कम से कम अत्यधिक) प्रतिलिपि संचालन की समस्याओं का कारण बनता है। मान लीजिए कि कोई ऑब्जेक्ट संग्रह का हिस्सा है, और आगे मान लें कि ऑब्जेक्ट को संग्रह के संदर्भ की आवश्यकता है। उस ऑब्जेक्ट पर एक बेवकूफ गहरे प्रतिलिपि ऑपरेशन तब संग्रह की एक नई प्रति और उसके प्रत्येक सदस्य को तैयार करेगा। यह भी मानते हुए कि हम अनंत रिकर्सन की समस्या से बचते हैं, और ऑब्जेक्ट्स के इस नए सेट के बीच सभी संदर्भों को सुसंगत रखते हैं, यह अभी भी अधिकांश उद्देश्यों के लिए अत्यधिक है, और उन मामलों के लिए जहां एक नया संग्रह वांछित है, क्या इससे अधिक समझ नहीं आएगी इस उद्देश्य के लिए, अपने सदस्यों में से एक के बजाय संग्रह को गहराई से कॉपी करने के लिए?

मुझे लगता है कि एक गहरी प्रतिलिपि जिसमें स्वामित्व वाली वस्तुएं शामिल हैं, जैसा कि आप सुझाव देते हैं, अधिकांश उद्देश्यों के लिए एकमात्र दृश्य दृष्टिकोण है।

+0

आपकी महान प्रतिक्रिया के लिए धन्यवाद! मुझे गहरा क्लोन बनाने के दौरान विशेष रूप से अनंत रिकर्सन का उदाहरण पसंद है। यह वास्तव में एक ऐसा मामला है जिसके लिए समेकित वस्तुओं को छोड़ने के लिए गहरी प्रतिलिपि की आवश्यकता होती है। –

+0

http://stackoverflow.com/a/12187738/363751 पर इसी तरह के प्रश्न पर मेरा उत्तर कैसा लगता है? – supercat

1

ओपोजिट में उथले में दीप प्रतिलिपि को पूरी वस्तु को जमीन पर दोबारा प्रतिलिपि बनाना चाहिए और ऑब्जेक्ट की पूरी प्रतिलिपि बनाना और सभी निहित वस्तुओं को बनाना चाहिए।

तो हाँ, यह चर, न केवल लिंक .. कॉपी चाहिए

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

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