2010-03-11 11 views
7

प्रतिलिपि बनाने वाले सामान अपरिवर्तनीय वस्तुओं के लिए अनावश्यक क्यों हैं? कृपया मेरे लिए यह समझाओ।प्रतिकृति वस्तुओं के लिए कॉपी कन्स्ट्रक्टर अनावश्यक क्यों हैं?

+0

फिर क्लोन विधि क्यों उपयोग की जाती है? की – Jothi

+0

संभावित डुप्लिकेट [क्या अपरिवर्तनीय वस्तुओं बनाता सुरक्षित प्रकाशन तकनीक के बिना प्रकाशित करने के लिए?] (http://stackoverflow.com/questions/17000617/what-makes-immutable-objects-to-be-published-without-safe-publication -टेक्निक) –

उत्तर

10

क्योंकि मूल्य नहीं बदल सकते, यह हर रूप में सभी मामलों में एक ही वस्तु के संदर्भ के लिए अच्छा सा, वहाँ एक "अतिरिक्त प्रतिलिपि" है, तो बात करने के लिए की आवश्यकता नहीं है।

हालांकि, कई भाषाओं एक प्रति निर्माता की आवश्यकता होती है:

+0

+1 बराबर अपरिवर्तनीय वस्तुओं के दो उदाहरण होने में कोई बात नहीं है - बस हर जगह एक ही उदाहरण का उपयोग करें। – Grundlefleck

2

यह कुछ हद तक निर्भर भाषा है। यदि आप एक प्रदान नहीं करते हैं, तो भाषा पूरी तरह से एक उत्पन्न करेगी।

अपरिवर्तनीय वस्तु के साथ, तथापि, यह आम तौर पर ठीक बाद से डिफ़ॉल्ट प्रतिलिपि निर्माता (आमतौर पर) सभी मानों का एक उथले नकल करता है। एक परिवर्तनीय डेटा प्रकार (यानी: अन्य ऑब्जेक्ट्स के लिए आंतरिक ऑब्जेक्ट संदर्भों के साथ), उथली प्रतिलिपि आमतौर पर एक खराब विकल्प होती है, क्योंकि प्रतिलिपि केवल संदर्भ/सूचक के भीतर encapsulated की प्रतिलिपि बना रही है।

+0

अपरिवर्तनीय वस्तुओं की प्रतिलिपि इष्टतम नहीं है - यह अनावश्यक रूप से अतिरिक्त संसाधनों का उपयोग करता है। यह स्थिति के आधार पर कोई समस्या उत्पन्न नहीं कर सकता है या नहीं, लेकिन अपरिवर्तनीय वस्तुओं की प्रतिलिपि सामान्य रूप से निराश होनी चाहिए। – Grundlefleck

4

यह विशेष रूप से जीवन के संबंध में एक भाषा निर्भर सवाल है। एक पल के लिए उन लोगों को भूल जाते हैं।

कॉपी कंस्ट्रक्टर्स है कि वे आप एक वस्तु लेने के लिए और इसके बारे में एक पूरी तरह से स्वतंत्र प्रतिलिपि बनाने के लिए के लिए अनुमति देने में मूल्यवान हैं। यह मूल्यवान है कि अब आप पहले से स्वतंत्र दूसरी वस्तु को संशोधित कर सकते हैं। या एक घटक वस्तु को बदलकर अन्य घटकों से खुद को बचाने के लिए एक निजी प्रतिलिपि बना सकता है।

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

अब जीवन भर फिर से बात करने देता है। सी ++ कॉपी कन्स्ट्रक्टर जैसी भाषाओं में आपको स्मृति/आजीवन मुद्दों के आसपास काम करने की अनुमति भी मिलती है। उदाहरण के लिए यदि मैं एक एपीआई लिख रहा हूं जो SomeType* लेता है और मैं इसे अपनी विधि के जीवनकाल से अधिक समय तक रखना चाहता हूं। सी ++ में ऐसा करने का सबसे विश्वसनीय तरीका एक प्रतिलिपि निर्माता के माध्यम से ऑब्जेक्ट की एक प्रति बनाना है।

1

यह इतना स्वाभाविक है क्योंकि अपरिवर्तनीय वस्तु का मूल्य नहीं बदला जा सकता।

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