Move constructor and move assignment operator c++ In Hindi
सी++ प्रोग्रामिंग लैंग्वेज में, मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर C++11 वर्जन में पहली बार पेश किए गए नए और एसेंशियल क्लास प्रोग्रामिंग फ़ीचर हैं। सी++ में मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर का यूज़ एक कॉस्टली सी++ कॉपी क्रिएट करने के बदले एक क्लास सोर्स ऑब्जेक्ट से दूसरे टारगेट डेस्टिनेशन क्लास ऑब्जेक्ट में प्रोग्राम रिसोर्स डाटा इनफार्मेशन को कॉपी मूव या ट्रांसफ़र करने में किया जाता है।

सी++ में मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर स्पेशली रूप से तब यूज़ किए जाते हैं, जब सी++ में कोई यूजर डिफाइन क्लास डायनामिक मेमोरी, फ़ाइलें, सॉकेट, या अन्य सिस्टम जैसे रिसोर्स को मैनेज करते है।
Why do we need move semantics features in C++?
किसी सी++ मूव सेमैंटिक्स प्रोग्राम में हम एक ऐसी क्लास डाटा टाइप स्ट्रक्चर लेआउट को इमेजिन करते है. जो डायनामिक आर्डर में क्लास ऑब्जेक्ट के लिए जरूरी मेमोरी को एलोकेट करती है.
class TestClass
{
int* datatype;
public:
TestClass(int element)
{
datatype = new int(element);
}
};
Here we have.
TestClass element (77);
TestClass newelement = element;
यहाँ इस एक्साम्प्ल में एक नॉर्मल कॉपी डाटा ऑपरेशन के लिए एक नई मेमोरी एलोकेट करने और डेटा कॉपी करने की जरूरत हो सकती है।
सी++ मूव सेमैंटिक्स प्रोग्राम के साथ, यदि इसमे element एक टेम्पररी क्लास ऑब्जेक्ट है, जिसके डाटा वैल्यू रिसोर्स अब एसेंशियल नहीं है. तो यहाँ हम इसमें एक डुप्लिकेट ऑब्जेक्ट क्रिएट करने के बदले उसके डाटा वैल्यू रिसोर्स को newelement वेरिएबल डाटा टाइप में इजीली ट्रांसफ़र कर सकते हैं।
Copy vs. Move Concept in C++ Programs.
C++ Copy Concept.
क्लास ऑब्जेक्ट P ──डेटा──> अलॉट मेमोरी P
क्लास ऑब्जेक्ट Q ──डेटा──> अलॉट मेमोरी Q
(इसमें क्लास ऑब्जेक्ट डेटा वैल्यू को कॉपी किया गया है)
C++ Move Concept.
क्लास ऑब्जेक्ट P ──डेटा──> अलॉट मेमोरी P
↑
क्लास ऑब्जेक्ट Q ──────────┘
क्लास ऑब्जेक्ट P → nullptr
यहाँ इस एक्साम्प्ल में क्लास ऑब्जेक्ट रिसोर्स की ओनरशिप को P से Q डाटा वैल्यू एलिमेंट को ट्रांसफर की जाती है।
Move Constructor Concept in C++.
एक मूव कंस्ट्रक्टर किसी मौजूदा टेम्पररी/rvalue ऑब्जेक्ट से रिसोर्स डाटा ट्रांसफर करके एक नया ऑब्जेक्ट क्रिएट करता है।
Syntax of Move Constructor.
ClassName(ClassName&& other);
यहाँ इसमें && ऐंपरसेंड ऑपरेटर एक rvalue रेफरेंस को इंडीकेट करता है।
Example of Move Constructor.
#include <iostream>
using namespace std;
class Move
{
int* datatype;
public:
Move(int element)
{
datatype = new int(element);
}
// Here we use move constructor to class object
Move(Move&& other)
{
datatype = other.datatype;
other.datatype = nullptr;
}
void display()
{
cout << *datatype << endl;
}
~Move()
{
delete datatype;
}
};
int main()
{
Move element(77);
Move newelement = std::move(element);
newelement.display();
return 0;
}
The output is.
77
What happens in the move constructor here?
Move newelement = std::move(element);
- यहाँ std::move(element) element को rvalue के ऑब्जेक्ट के रूप में ट्रीट करता है।
- इसमें मूव कंस्ट्रक्टर मेथड को कॉल किया जाता है।
- ऑब्जेक्ट पॉइंटर को element वैल्यू से newelement में मूव या ट्रांसफर किया जाता है।
- अंत में element.data को nullptr वैल्यू पर सेट किया गया है।
- यहाँ newelement क्लास ऑब्जेक्ट के लिए कोई नई इंटीजर डाटा टाइप वैल्यू मेमोरी एलोकेट नहीं की गई है।
Move Assignment Operator in C++.
सी++ प्रोग्राम में मूव असाइनमेंट ऑपरेटर यूजर डिफाइन क्लास प्रोग्राम में वेरिएबल ऑब्जेक्ट रिसोर्स को पहले से मौजूद किसी अन्य क्लास ऑब्जेक्ट में इजीली ट्रांसफर करता है।
Syntax of the Move Assignment Operator.
ClassName& operator=(ClassName&& other);
Example of the Move Assignment Operator.
#include <iostream>
using namespace std;
class Move
{
int* datatype;
public:
Move(int element)
{
datatype = new int(element);
}
// Here we use move constructor
Move(Move&& another)
{
datatype = another.datatype;
another.datatype = nullptr;
}
// Here we move assignment operator
Move& operator=(Move&& another)
{
if (this != &another)
{
delete datatype;
datatype = another.datatype;
another.datatype = nullptr;
}
return *this;
}
void preview()
{
if (datatype)
cout << *datatype<< endl;
}
~Move()
{
delete datatype;
}
};
int main()
{
Move element(7);
Move newelement(17);
newelement = std::move(element);
newelement.preview();
return 0;
}
The output is.
7
Here in the Move Assignment Operator example.
- यहाँ इस एक्साम्प्ल में newelement = std::move(element);
- move असाइनमेंट ऑपरेटर का यूज़ करता है. क्योंकि इसमें newelement पहले से मौजूद है।
Main Difference between Move Constructor vs Move Assignment Operator
| Move Constructor concept | Move Assignment Operator concept |
| Move constructor method used to creates a new class object | Move assignment operator works with an existing class object |
| Move constructor class object called during its initialization step | Move assignment operator called during assignment steps |
| Example: Q = std::move(P) when Q is being class object created | Example: Q = std::move(P) when Q already exists In class |
| Syntax: Class(Class&&) | Syntax: Class& operator=(Class&&) |
Simple example of a move constructor.
Move constructor in C++.
Move element(7);
Move newelement(std::move(element));
newelement क्लास ऑब्जेक्ट को इसमें बनाया जा रहा है।
Move assignment statement.
Move element(7);
Move newelement(17);
newelement = std::move(element);
यहाँ इसमें newelement पहले से डिफाइन या मौजूद है।
Copy vs. Move concept in C++ programming.
सी++ प्रोग्रामिंग लैंग्वेज में सामान्य रूप से कॉपी और मूव कांसेप्ट को बेहतर समझने के लिए ये कुछ ज़रूरी स्पेशल मेंबर फ़ंक्शन हैं.
- क्लास में डिफाइन कॉपी कंस्ट्रक्टर मेथड
- क्लास में कॉपी असाइनमेंट ऑपरेटर का यूज़
- मूव कंस्ट्रक्टर मेथड का यूज़
- मूव असाइनमेंट ऑपरेटर का यूज़
| Class method operation | What is their purpose |
| Copy constructor method | Copy constructor method used to creates a new class object by copying another class element |
| Copy assignment method | Copy assignment method used to copies data into an existing class object |
| Move constructor method | Move constructor method used to creates a new class object by transferring its resources |
| Move assignment method | Move assignment method used to transfers class resources into an existing class object |
Copy vs. Move concept example.
P q = p; // ये एक कॉपी कंस्ट्रक्टर मेथड डिफाइन है
q = p; // ये एक कॉपी असाइनमेंट मेथड डिफाइन है
P r = std::move(p); // ये एक मूव कंस्ट्रक्टर मेथड डिफाइन है
r = std::move(q); // ये एक मूव असाइनमेंट मेथड डिफाइन है
Why do move semantics improve program performance in a C++ program?
सी++ प्रोग्राम में माना कि किसी क्लास ऑब्जेक्ट के पास डायनामिक रूप से एलोकेटेड क्लास वेरिएबल डाटा टाइप मेमोरी का एक बड़ा ब्लॉक है।
Copying a class object may require the following.
क्लास ऑब्जेक्ट के लिए नई मेमोरी दें
↓
सारा डेटा को डेस्टिनेशन लोकेशन में प्रॉपर कॉपी करें
↓
दोनों रिसोर्स को प्रॉपर रखें
The move class method allows for easy transfer of ownership of an object.
मूव से पॉइंटर/ओनरशिप को ट्रांसफर करें
↓
इस प्रोसेस में कोई महंगा डेटा कॉपी नहीं है
इस वजह से, जब मौजूदा क्लास ऑब्जेक्ट में बड़े या कॉपी करने में महंगे रिसोर्स यूज़ होते हैं, तो इस प्रोसेस में मूव सिमेंटिक्स प्रोग्राम परफॉर्मेंस को काफी बेहतर बना सकता है।
Essentials of the move constructor and move assignment operator in C++.
- पहली बार मूव सिमेंटिक्स फीचर C++11 वर्जन में स्टार्ट किए गए थे।
- मूव कंस्ट्रक्टर प्रोग्राम में && सिंबल एड्रेस ऑपरेटर का यूज़ करता है।
- मूव असाइनमेंट ऑपरेटर भी && सिंबल एड्रेस ऑपरेटर का यूज़ करता है।
- ये सी++ में सामान्य रूप से एक ओनरशिप/रिसोर्स को कॉपी करने के बदले उसे ट्रांसफर करते हैं।
- सी++ प्रोग्राम में std::move() फंक्शन मेथड का यूज़ सामान्य रूप से किसी क्लास ऑब्जेक्ट को मूव करने में किया जाता है।
- किसी क्लास ऑब्जेक्ट से मूव करने के बाद, वह प्रोग्राम में एक वैलिड क्लास ऑब्जेक्ट बना रहता है. लेकिन इसकी वैल्यू सामान्य रूप से ऐसी चीज़ नहीं होती है, जिस पर आपको ट्रस्ट करना चाहिए, जब तक कि आपकी क्लास इसे न इंडीकेट करे।
- यूजर डिफाइन क्लास में मूव किया गया क्लास ऑब्जेक्ट अभी भी सिक्योर आर्डर में डिस्ट्रक्टिबल होना चाहिए।
An easy way to remember the move constructor and move assignment operator in C++.
- Move constructor → इसमें सी++ यूजर को एक नए ऑब्जेक्ट को रिसोर्स मिलते हैं।
- Move assignment → इसमें मौजूदा क्लास ऑब्जेक्ट को रिसोर्स मिलते हैं।
Move constructor method in C++.
P → [क्लास ऑब्जेक्ट रिसोर्स]
↓ ट्रांसफर
Q → [क्लास ऑब्जेक्ट रिसोर्स]
Move assignment method in C++.
P → [क्लास ऑब्जेक्ट रिसोर्स]
↓ ट्रांसफर
Q (पहले से मौजूद) → [क्लास ऑब्जेक्ट रिसोर्स]
Move constructor and move assignment operator in a nutshell.
यूजर डिफाइन क्लास प्रोग्राम में एक मूव कंस्ट्रक्टर और मूव असाइनमेंट ऑपरेटर C++ प्रोग्राम को एक सोर्स ऑब्जेक्ट लोकेशन से लेकर दूसरे अन्य टारगेट डेस्टिनेशन लोकेशन में क्लास ऑब्जेक्ट रिसोर्स को एफ्फिसेंटली ट्रांसफर करने में हेल्प करते हैं. जिससे मौजूदा क्लास प्रोग्राम में अनावश्यक वेरिएबल क्लास ऑब्जेक्ट रिसोर्सेज कॉपी प्रोसेस को अवॉयड किया जा सकता है।

