Avatar ·

لماذا يمكن إرجاع std::unique_ptr من دالة بدون std::move؟

مرحباً! لقد بدأت مؤخراً في تعلم 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 يمنع النسخ! إذا حاولت فعل نفس الشيء مع متغير عادي في دالة أخرى، على سبيل المثال...