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