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