C++ Academy · पाठ

Move constructors और move assignment

move constructors और move assignment operators सही ढंग से लागू करें।

पाठ 4, कुल 4 में से13 चरण

Move constructors और move assignment, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

दो विशेष सदस्य

Move कंस्ट्रक्टर और move असाइनमेंट ऑपरेटर आपकी क्लास को किसी दूसरे इंस्टेंस के संसाधनों का स्वामित्व बिना कॉपी किए लेने देते हैं।

सिग्नेचर

दोनों एक ही प्रकार का रिवैल्यू संदर्भ लेते हैं।

class String {
public:
    String(String&& other) noexcept;          // move ctor
    String& operator=(String&& other) noexcept; // move assign
};

Move कंस्ट्रक्टर लागू करना

स्रोत के संसाधन हड़प लें और उसे वैध खाली स्थिति में छोड़ दें।

String(String&& other) noexcept
    : data_(other.data_), size_(other.size_) {
    other.data_ = nullptr;
    other.size_ = 0;
}

Move असाइनमेंट लागू करना

तीन चरण: वर्तमान संसाधन मुक्त करें, स्रोत के संसाधन हड़प लें और स्रोत को खाली छोड़ दें।

String& operator=(String&& other) noexcept {
    if (this != &other) {
        delete[] data_;
        data_ = other.data_;
        size_ = other.size_;
        other.data_ = nullptr;
        other.size_ = 0;
    }
    return *this;
}

noexcept क्यों महत्वपूर्ण है

जहाँ संभव हो, move ऑपरेशन को noexcept चिह्नित करें। std::vector जैसे मानक कंटेनर आकार बदलते समय केवल तभी move का उपयोग करते हैं जब वह noexcept हो; अन्यथा अपवाद-सुरक्षा के लिए वे कॉपी पर वापस चले जाते हैं।

पाँच का नियम

यदि आप इनमें से कोई एक लिखते हैं, तो पाँचों के बारे में सोचें:

  • डिस्ट्रक्टर
  • Copy कंस्ट्रक्टर
  • Copy असाइनमेंट
  • Move कंस्ट्रक्टर
  • Move असाइनमेंट

शून्य का नियम

और भी बेहतर—इनमें से कोई भी न लिखें। सदस्यों को RAII प्रकारों (वेक्टर, स्ट्रिंग और स्मार्ट पॉइंटर) के रूप में संग्रहीत करें। कंपाइलर द्वारा बनाए गए डिफ़ॉल्ट सही और दक्षता से काम करते हैं।

class Widget {
    std::string name_;
    std::vector<int> data_;
    // No need for destructor, copy, or move — compiler does the right thing
};

जब कंपाइलर मूव उत्पन्न करता है

कंपाइलर डिफ़ॉल्ट मूव सदस्य केवल इन स्थितियों में उत्पन्न करता है:

  • उपयोगकर्ता द्वारा घोषित कॉपी कंस्ट्रक्टर, कॉपी असाइनमेंट, डिस्ट्रक्टर या मूव सदस्य मौजूद न हों
  • सभी सदस्य और बेस स्वयं मूव किए जा सकने योग्य हों

डिफ़ॉल्ट और हटाए गए मूव

आप कंपाइलर द्वारा उत्पन्न मूव को स्पष्ट रूप से सक्षम या निषिद्ध कर सकते हैं।

class Widget {
public:
    Widget(Widget&&) = default;
    Widget& operator=(Widget&&) = default;
    // or
    Widget(Widget&&) = delete;
};

मूव के बाद

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

  • इसे नष्ट कर सकते हैं
  • इसे नया मान असाइन कर सकते हैं
  • ऐसी कोई भी क्रिया कर सकते हैं जिसकी कोई पूर्वशर्त न हो (size(), empty(), clear())

उपयोग के मामले

मूव सेमांटिक्स इन कार्यों को तेज़ बनाता है:

  • बड़े ऑब्जेक्ट लौटाना (जब RVO सक्रिय न हो)
  • बड़े ऑब्जेक्ट को कंटेनरों में रखना (rvalue पर push_back करना)
  • अपने संसाधन-स्वामी प्रकारों को लागू करना

त्वरित जाँच

मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर को noexcept क्यों चिह्नित करना चाहिए?

पुनरावलोकन

मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर शीघ्र नष्ट होने वाले rvalue से संसाधन ले लेते हैं। कंटेनर की गति के लिए उन्हें noexcept चिह्नित करें। Rule of Five का पालन करें — या इससे बेहतर, मानक RAII प्रकारों को संयोजित करके Rule of Zero अपनाएँ।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Move constructors और move assignment” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Move constructors और move assignment” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Move constructors और move assignment” में मैं क्या सीखूँगा?

move constructors और move assignment operators सही ढंग से लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Move constructors और move assignment” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Lvalue बनाम rvalue: अंतर
  2. Rvalue references और && सिंटैक्स
  3. std::move और std::forward
  4. Move constructors और move assignment
← C++ Academy पर वापस जाएँ