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