2009-11-17 16 views
8

vb6 या जावा में ऑब्जेक्ट क्लोनिंग क्या है? हम किस स्थिति में क्लोन का उपयोग करते हैं? क्लोनिंग ऑब्जेक्ट्स का मतलब क्या है? क्या कोई मुझे उदाहरण के साथ बता सकता है।क्लोन() ऑब्जेक्ट को क्लोन करने का क्या अर्थ है?

+1

अनुभवी लोगों के लिए स्पष्ट लगता है, लेकिन शुरुआती लोग अक्सर "अरे के साथ संघर्ष करते हैं, जब मैंने यह 'अन्य' एक बदल दिया तो मेरी वस्तु क्यों बदल गई। यह अहसास है कि नाम मूल रूप से पॉइंटर्स को गठबंधन करते हैं धीरे-धीरे आते हैं (और क्लोनिंग को समझना उस प्रक्रिया को बहुत तेज़ करता है)। –

उत्तर

11

क्लोनिंग वास्तव में ऑब्जेक्ट डेटा को एक नई वस्तु में कॉपी कर रहा है।

यह उदाहरण डेटा क्लोन नहीं करता है:

Foo p = new Foo(); 
Foo o = p; 

तो Foo एक सदस्य a है और आप p.a तो o.a भी क्योंकि दोनों p और o बिंदु एक ही वस्तु में बदल जाती है बदल जाते हैं।

हालांकि,

Foo p = new Foo(); 
Foo o = p.Clone(); 

इस मामले में अगर आप p.a तो o.a बदल क्योंकि वे वास्तव में वस्तुओं को अलग करने के बात ही रहता है।

वास्तव में क्लोन कर सकते हैं दो अलग-अलग तरीके: उथले क्लोन या गहरे क्लोन।

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

एक गहरा क्लोन वास्तव में सभी सदस्यों को नए ऑब्जेक्ट में चलाता है और क्लोन करता है। इस तरह ऑब्जेक्ट्स सभी डेटा की पूरी प्रतियां हैं।

+0

बीटीडब्ल्यू, क्लोनिंग का एक तीसरा तरीका है - एक अर्थपूर्ण स्तर का क्लोन। उदाहरण का अर्थपूर्ण स्तर का क्लोन एक सूची एक नई सूची होगी जिसमें पुरानी एक ही वस्तु होगी। – supercat

+0

@supercat - सूची के उथले क्लोन से अलग कैसे है? – Aaron

+0

@Aaron: मान लीजिए कि एक संग्रह को सरणी के संदर्भ के रूप में लागू किया गया है, इस बात की गिनती के साथ कि कितने आइटम मान्य हैं। इस तरह के संग्रह वाले किसी ऑब्जेक्ट का एक उथला क्लोन एक प्रतिलिपि वैध-आइटम गणना के साथ एक नई वस्तु होगी, लेकिन मूल के समान तत्वों का संदर्भ होगा। एक सेमेटिक-स्तरीय क्लोन में कॉपी की गई गणना और सरणी के उथले क्लोन का संदर्भ होगा। – supercat

2

सामान्य बोलने वाली वस्तुओं संदर्भ द्वारा पारित की जाती हैं। तो यदि आप $objB=$objA कहते हैं तो आपको एक नई वस्तु नहीं मिल रही है; आपको एक ही वस्तु के लिए एक नया नाम मिल रहा है। हालांकि, अगर आप $objB= clone $objA कहते हैं तो आपको $objA की एक प्रति प्राप्त होती है। पहले मामले में, जो भी आप $objB पर करते हैं $objA पर भी होता है। दूसरे मामले में, $objB स्वतंत्र है।

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