असाइनमेंट में 2 चरण होते हैं, किसी वस्तु की पुरानी स्थिति को तोड़ना और उसके लिए एक नया राज्य बनाना। विनाशक का उपयोग पहले चरण के लिए किया जाता है और प्रतिलिपि बनाने वाला दूसरा चरण करता है।
इन दोनों को लागू करना सीधा है। लेकिन जब असाइनमेंट ऑपरेटर को ओवरलोड किया जाता है, तो इसे लागू करना काफी मुश्किल हो सकता है। कॉपी और स्वैपीडियोम उसी का समाधान है।
यह मुहावरा डेटा की स्थानीय प्रतिलिपि बनाने के लिए कॉपी-कंस्ट्रक्टर का उपयोग करता है। इसके बाद यह पुराने डेटा को नए डेटा के साथ स्वैप फ़ंक्शन का उपयोग करके स्वैप करता है। अस्थायी प्रतिलिपि को विनाशक का उपयोग करके नष्ट कर दिया जाता है। अंत में हमारे पास नए डेटा की केवल एक प्रति है।
तो, कॉपी-एंड-स्वैप मुहावरे को तीन चीजों की आवश्यकता होती है
- कॉपी-कंस्ट्रक्टर
- कॉपी-कंस्ट्रक्टर
- विनाशक
- स्वैप फ़ंक्शन।
स्वैप फ़ंक्शन एक गैर-फेंकने वाला फ़ंक्शन है जो एक वर्ग, सदस्य की दो वस्तुओं को स्वैप करता है।
नोट :आपको std::swap फ़ंक्शन का उपयोग नहीं करना चाहिए क्योंकि यह आंतरिक रूप से कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर का उपयोग करता है।