C++11 में मूव सेमैंटिक्स (move semantics) क्या है और इसकी आवश्यकता क्यों है?
नमस्ते! मैंने अभी C++11 सीखना शुरू किया है और 'move semantics' शब्द पर आया हूँ। मुझे लगता है कि यह प्रदर्शन से संबंधित है, लेकिन व्यवहार में मैं इसे समझ नहीं पा रहा हूँ।
मान लीजिए, मेरे पास यह class है:
```cpp
class MyString {
public:
MyString(const char* str) : data_(new char[strlen(str) + 1]) { strcpy(data_, str); }
~MyString() { delete[] data_; }
MyString(const MyString& other) : data_(new char[strlen(other.data_) + 1]) { strcpy(data_, other.data_); }
char* data_;
};
```
मैं एक function लिखता हूँ जो `MyString` लौटाता है:
```cpp
MyString createHello() {
MyString s("Hello, World!");
return s; // यहाँ क्या होता है? कॉपी?
}
```
पुराने C++03 का उपयोग करते हुए, function से लौटने पर कॉपी constructor कॉल होता था, जो नई मेमोरी आवंटित करता था और डेटा कॉपी करता था। यह महँगा है। लेकिन मैंने सुना है कि C++11 में डेटा को 'मूव' किया जा सकता है ताकि कॉपी से बचा जा सके। यह कैसे काम करता है? rvalue references और std::move क्या हैं? इनका उपयोग कब करें?