قواعد الملكية الثلاث
- لكل قيمة مالك واحد.
- لا يمكن إلا مالك واحد في كل لحظة.
- عند خروج المالك من النطاق، تُحرَّر القيمة تلقائيًا.
هذا يضمن أمان الذاكرة دون جامع قمامة (Garbage Collector).
النقل (Move)
let s1 = String::from("مرحبًا");
let s2 = s1; // نُقلت الملكية إلى s2
// println!("{}", s1); // خطأ! s1 لم تعد صالحة
النسخ (Copy)
الأنواع البسيطة (الأرقام، bool، char) تُنسَخ بدل النقل:
let x = 5;
let y = x; // نسخة
println!("{x} {y}"); // كلاهما صالح
الدوال والملكية
fn takes(s: String) { /* تملك s */ }
let s = String::from("hi");
takes(s);
// s لم تعد صالحة هنا (نُقلت)
لتجنّب النقل المتكرّر نستخدم الاستعارة (الدرس التالي).
🎯 التالي: الاستعارة والمراجع.