Pointer без risk. Вказує на дані без власництва. &T (immutable), &mut T (mutable).
let s = String::from("hello");
let r1 = &s; // immutable reference
let r2 = &s; // OK: можна багато
let r3 = &s; // OK
println!("{}, {}, {}", r1, r2, r3); // Все OK
let mut s = String::from("hello");
let r = &mut s; // mutable reference
r.push_str(" world");
println!("{}", r); // OK
// let r2 = &mut s; // ERROR: можна тільки одна &mut!
// WRONG: функція повертає reference на local variable
// fn dangle() -> &String {
// let s = String::from("hi");
// &s // ERROR: s видаляється по завершені функції
// }
// RIGHT: повертаємо значення
fn no_dangle() -> String {
let s = String::from("hi");
s // Move: переносимо власність
}
Частина компілятора, яка перевіряє правила reference на compile-time.
| [object Object] |
| [object Object] |
Лекція 15: Structures и Enums
Дякую за увагу! 💾