IMHO, मौजूदा उत्तर एक खराब काम करते हैं जो "क्यों" की व्याख्या करते हैं - जो व्यवहार के वैध को दोहराते हुए बहुत अधिक ध्यान केंद्रित करता है। "एक्सेस संशोधक वर्ग स्तर पर काम करते हैं, न कि वस्तु स्तर पर।" - हां लेकिन क्यों?
यहाँ अतिव्यापी अवधारणा यह है कि यह प्रोग्रामर (ओं) को डिज़ाइन करना, लिखना और एक वर्ग को बनाए रखना है जो (हैं) से अपेक्षित है कि वे ओओ इनकैप्सुलेशन को समझें और इसके कार्यान्वयन को समन्वित करें। इसलिए, यदि आप लिख रहे हैं, तो आप इसे class X
एन्कोडिंग नहीं X x
कर सकते हैं कि किसी व्यक्तिगत वस्तु का उपयोग कोड के साथ कैसे किया जा सकता है, लेकिन यह भी कैसे:
- व्युत्पन्न वर्ग इसके साथ बातचीत करने में सक्षम हैं (वैकल्पिक रूप से शुद्ध आभासी कार्यों और / या संरक्षित पहुंच के माध्यम से), और
- अलग-अलग
X
ऑब्जेक्ट आपके डिज़ाइन से पोस्ट-कंडीशंस और इन्वर्टर को सम्मानित करते हुए इच्छित व्यवहार प्रदान करने में सहयोग करते हैं।
यह सिर्फ कॉपी कंस्ट्रक्टर नहीं है - एक महान कई ऑपरेशन में आपकी कक्षा के दो या अधिक उदाहरण शामिल हो सकते हैं: यदि आप तुलना कर रहे हैं, जोड़ / गुणा / विभाजित कर रहे हैं, कॉपी-निर्माण, क्लोनिंग, असाइनमेंट आदि कर रहे हैं, तो अक्सर ऐसा होता है कि आप या तो बस दूसरे ऑब्जेक्ट में निजी और / या संरक्षित डेटा तक पहुंच होनी चाहिए, या इसे सरल, तेज या आम तौर पर बेहतर कार्य कार्यान्वयन की अनुमति देना चाहिए।
विशेष रूप से, ये ऑपरेशन निजीकृत उपयोग का लाभ उठाने के लिए काम कर सकते हैं जैसे:
- (कॉपी कंस्ट्रक्टर) एक प्रारंभिक सूची में "rhs" (दाएं हाथ की ओर) ऑब्जेक्ट के एक निजी सदस्य का उपयोग करते हैं, ताकि डिफ़ॉल्ट-निर्माण के बजाय एक सदस्य चर स्वयं कॉपी-निर्माण किया जाता है (यदि कानूनी भी है) तो असाइन किया गया (फिर से,) अगर कानूनी है)
- शेयर संसाधन - फाइल हैंडल, साझा मेमोरी सेगमेंट,
shared_ptr
संदर्भ डेटा के लिए आदि।
auto_ptr<>
निर्माणाधीन वस्तु के स्वामित्व वाली "चाल" जैसे चीजों का स्वामित्व लें
- निजी "कैश", अंशांकन, या राज्य के सदस्यों को खरोंच से उन्हें पुनर्जीवित किए बिना एक बेहतर उपयोग करने योग्य स्थिति में नई वस्तु के निर्माण के लिए आवश्यक प्रतिलिपि बनाएँ
- कॉपी / एक्सेस डायग्नोस्टिक / ट्रेस जानकारी को कॉपी किए जा रहे ऑब्जेक्ट में रखा गया है जो अन्यथा सार्वजनिक एपीआई के माध्यम से सुलभ नहीं है, लेकिन बाद के कुछ अपवाद ऑब्जेक्ट या लॉगिंग द्वारा उपयोग किया जा सकता है (उदाहरण के लिए समय / परिस्थितियों के बारे में जब "मूल" गैर-कॉपी-निर्मित उदाहरण निर्माण किया गया था)
- कुछ डेटा की अधिक कुशल प्रतिलिपि बनाएँ: उदाहरण के लिए वस्तुओं में कोई
unordered_map
सदस्य हो सकता है, लेकिन सार्वजनिक रूप से केवल एक्सपोज़र begin()
और end()
पुनरावृत्तियाँ - सीधे पहुँच के साथ size()
आप reserve
तेज़ी से प्रतिलिपि बनाने की क्षमता प्राप्त कर सकते हैं ; बदतर अभी भी अगर वे केवल बेनकाब at()
और insert()
और नहीं तो throw
....
- माता-पिता / समन्वय / प्रबंधन वस्तुओं पर संदर्भों की प्रतिलिपि बनाएँ जो क्लाइंट कोड के लिए अज्ञात या केवल-लेखन हो सकते हैं