Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में कॉपी-एंड-स्वैप मुहावरा क्या है?


कॉपी-एंड-स्वैप मुहावरा

कॉपी-एंड-स्वैप (Copy-and-Swap) C++ में असाइनमेंट ऑपरेटर (operator=) को सुरक्षित और कुशलतापूर्वक लागू करने का एक लोकप्रिय मुहावरा है। यह "स्ट्रॉन्ग एक्सेप्शन सेफ्टी" गारंटी प्रदान करता है: यदि ऑपरेशन के दौरान कोई अपवाद फेंका जाता है, तो ऑब्जेक्ट की स्थिति अपरिवर्तित रहती है।

यह कैसे काम करता है

  1. कॉपी: स्रोत ऑब्जेक्ट की एक स्थानीय प्रति (कॉपी) कॉपी कंस्ट्रक्टर का उपयोग करके बनाई जाती है।
  2. स्वैप: वर्तमान ऑब्जेक्ट के डेटा को इस नई बनी प्रति के साथ swap() फ़ंक्शन का उपयोग करके अदला-बदली किया जाता है।
  3. नष्ट: पुराना डेटा (जो अब अस्थायी ऑब्जेक्ट में है) स्वचालित रूप से नष्ट हो जाता है जब अस्थायी ऑब्जेक्ट स्कोप से बाहर जाता है।

आवश्यक घटक

इस मुहावरे को काम करने के लिए क्लास में तीन चीजें होनी चाहिए:

  • एक कॉपी कंस्ट्रक्टर (गहरी कॉपी के लिए)।
  • एक डिस्ट्रक्टर (संसाधन मुक्त करने के लिए)।
  • एक नॉन-थ्रोइंग swap() फ़ंक्शन (दो ऑब्जेक्ट्स के आंतरिक डेटा को कुशलतापूर्वक स्वैप करने के लिए)।

महत्वपूर्ण नोट

std::swap का उपयोग न करें क्योंकि यह आंतरिक रूप से कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर का उपयोग करता है, जिससे अनंत रिकर्सन हो सकती है। अपना खुद का swap मेंबर फ़ंक्शन लिखें जो केवल पॉइंटर्स/मेंबर्स को स्वैप करता है।

उदाहरण

class MyClass {
    int* data;
    size_t size;
public:
    // कॉपी कंस्ट्रक्टर
    MyClass(const MyClass& other) : data(new int[other.size]), size(other.size) {
        std::copy(other.data, other.data + size, data);
    }

    // Swap फ़ंक्शन (नॉन-थ्रोइंग)
    void swap(MyClass& other) noexcept {
        std::swap(data, other.data);
        std::swap(size, other.size);
    }

    // असाइनमेंट ऑपरेटर (कॉपी-एंड-स्वैप)
    MyClass& operator=(MyClass other) { // पास-बाय-वैल्यू कॉपी बनाता है
        swap(other); // *this के साथ स्वैप करता है
        return *this; // 'other' (पुराना डेटा) यहाँ नष्ट होता है
    }

    ~MyClass() { delete[] data; }
};
  1. - C++ में const कीवर्ड क्या है?

    हम किसी वेरिएबल को स्थिर घोषित करने के लिए const क्वालिफायर का उपयोग करते हैं। इसका मतलब है कि एक बार वेरिएबल इनिशियलाइज़ हो जाने के बाद हम उसका मान नहीं बदल सकते। const का उपयोग करने का एक बहुत बड़ा लाभ है। उदाहरण के लिए, यदि आपके पास PI के मान जैसा एक स्थिर मान है, तो आप नहीं चाहेंगे कि प्रोग्राम

  1. - C++ सीखने के लिए अच्छे संसाधन क्या हैं?

    वेब पर कई संसाधन हैं जो आपको C++ सीखने में मदद कर सकते हैं। मैंने C++ सीखने के लिए कुछ बेहतरीन संसाधनों की एक संकलित सूची देने की कोशिश की है: C++ - यह C++ सीखने के लिए एक बेहतरीन जगह है क्योंकि यह C++ में लगभग सभी बुनियादी और मध्यवर्ती विषयों को गहराई से कवर करता है और कुल मिलाकर C++ सीखने के लिए

  1. - C++ प्रोग्रामिंग भाषा के फायदे क्या हैं?

    C++ के निम्नलिखित फायदे हैं: C++ एक अत्यधिक पोर्टेबल भाषा है और अक्सर मल्टी-डिवाइस, मल्टी-प्लेटफॉर्म ऐप विकास के लिए चयन की भाषा होती है। C++ एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है और इसमें क्लासेस, इनहेरिटेंस, पॉलीमॉर्फिज्म, डेटा एब्स्ट्रैक्शन, और एनकैप्सुलेशन जैसे कॉन्सेप्ट्स शामिल हैं जो कोड