Avatar ·

बिना 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 कॉपी करने की अनुमति नहीं देता! अगर मैं किसी अन्य फ़ंक्शन में सामान्य वेरिएबल के साथ ऐसा ही करने की कोशिश करूँ, उदाहरण के लिए