बिना std::move के फ़ंक्शन से std::unique_ptr क्यों लौटाया जा सकता है?
नमस्ते! मैंने हाल ही में C++11 और स्मार्ट पॉइंटर्स सीखना शुरू किया है, और मुझे std::unique_ptr को लेकर भ्रम हो गया है। मैं जानता हूँ कि unique_ptr को कॉपी नहीं किया जा सकता — केवल मूव किया जा सकता है। मूव करने के लिए आमतौर पर std::move() का उपयोग किया जाता है। लेकिन मैंने एक अजीब व्यवहार देखा: जब मैं एक फ़ंक्शन लिखता हूँ जो unique_ptr बनाता और लौटाता है, तो कंपाइलर कोई त्रुटि नहीं देता, भले ही मैं std::move() को कॉल न करूँ।
यहाँ एक उदाहरण है:
```cpp
#include
std::unique_ptr createInt() {
std::unique_ptr ptr = std::make_unique(42);
return ptr; // बिना std::move() के — और यह काम करता है!
}
int main() {
std::unique_ptr p = createInt();
return 0;
}
```
यह कंपाइल क्यों होता है? आखिर unique_ptr कॉपी करने की अनुमति नहीं देता! अगर मैं किसी अन्य फ़ंक्शन में सामान्य वेरिएबल के साथ ऐसा ही करने की कोशिश करूँ, उदाहरण के लिए