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