مالکیت (Ownership)
«مالکیت در راست» یعنی هر مقدار یک «صاحب» دارد. وقتی صاحب از دامنه بیرون برود، مقدار پاک می شود. این روش، مدیریت حافظه (Memory) را امن و سریع می کند.
قوانین مالکیت
1) هر مقدار فقط یک صاحب دارد. 2) با پایان دامنه، مقدار پاک می شود. 3) می توانی موقتاً امانت بدهی؛ این را «ارجاع/قرض» می گویند و بعداً می بینیم.
مثال پایه: جابه جایی مالکیت (Move)
وقتی یک String را به متغیر دیگر بدهی، مالکیت «منتقل» می شود. متغیر قبلی دیگر معتبر نیست.
fn main() {
let a = String::from("Hello");
let b = a;
// println!("{}", a); // خطا: a دیگر مالک نیست
println!("{}", b);
}
انواع کپی پذیر (Copy)
اعداد، کاراکترها و بولین ها معمولاً «کپی» می شوند، نه جابه جا. پس هر دو متغیر قابل استفاده اند.
fn main() {
let a = 5;
let b = a;
println!("a = {}", a);
println!("b = {}", b);
}
نگه داشتن هر دو مقدار: clone
اگر واقعاً هر دو متغیر باید صاحب داده باشند، از .clone() استفاده کن؛ یک کپی عمیق می سازد.
fn main() {
let a = String::from("Hello");
let b = a.clone();
println!("a = {}", a);
println!("b = {}", b);
}
گام های تمرین
- یک
Stringبساز و به متغیر دوم بده. - سعی کن متغیر اول را چاپ کنی و خطا را ببین.
- همان کار را با عدد انجام بده و تفاوت را ببین.
- با
.clone()هر دو مقدار را نگه دار.
جمع بندی سریع
- هر مقدار یک صاحب دارد.
- خروج از دامنه، پاک سازی خودکار است.
Stringبا انتساب «منتقل» می شود.- اعداد معمولاً «کپی» می شوند.
.clone()کپی عمیق می سازد.
برای متن ها، صفحه رشته ها را ببین. بعد، «قرض دادن» را در ارجاع و قرض یاد بگیر. همچنین راهنمای مالکیت در راست را نشانه گذاری کن.