Zasady posiadania¶
- Każda wartość w Rust ma zmienną, która jest nazywana jej właścicielem (owner)
- Właściciel może być tylko jeden w danym momencie
- Gdy właściciel wyjdzie poza zakres, wartość zostanie usunięta
Przenoszenie własności¶
Własność można przenieść podczas:
- przypisania wartości (assignment)
- przekazania wartości, jako parametr funkcji
- zwrócenia wartości, jako wynik funkcji
Przykłady przenoszenia własności
fn main() {
let s1 = String::from("Hello Rust");
let s2 = s1; // move ownership from s1 to s2
println!("{}", s1); // doesn't work! (s1 is not an owner)
}
fn main() {
let s1 = String::from("Let's...");
process_text(s1); // s1 is moved to the function
println!("{s1}") // cannot use s1 here anymore
}
Pożyczanie (borrowing)¶
Tworzymy nową zmienną, która wskazuje na właściciela wartości.
Odwołania mutowalne¶
Pożyczanie mutowalnej zmiennej - możemy ją wtedy edytować/zmieniać:
fn main() {
let mut s1 = String::from("Hello, ");
change(&mut s1);
}
fn change(s : &mut String) {
s.push_str("world!");
}
Zasady pożyczania¶
W dowolnym momencie możemy mieć tylko jedną z poniższych sytuacji:
- Dowolną liczbę niemutowalnych referencji (do jednej wartości)
- Jedną mutowalną referencję (do danej wartości)
Nie możemy mieć jednocześnie referencji mutowalnej i niemutowalnej, ani wielu referencji mutowalnych.
Uwaga
Jeśli dana struktura implementuje interfejs Copy
to mimo, że przekazujemy ją np. do funkcji (bez pożyczki), to nie następuje przeniesienie własności.