// приведёт к разыменованию освобождённой памяти, но это запрещено компилятором
// Ошибка! Причина та же, что и в прошлый раз
//println!("b содержит: {}", b);
// ЗАДАНИЕ ^ Попробуйте раскомментировать эту строку
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Изменяемость данных может быть изменена при передаче владения.
fn main() {
let immutable_box = Box::new(5u32);
println!("immutable_box содержит в себе {}", immutable_box);
// Ошибка изменяемости
//*immutable_box = 4;
// *Переместить* упаковку, изменив её владение (и изменяемость)
let mut mutable_box = immutable_box;
println!("mutable_box содержит в себе {}", mutable_box);
// Изменяем данные внутри упаковки
*mutable_box = 4;
println!("mutable_box now содержит в себе {}", mutable_box);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Большую часть времени мы хотим обращаться к данным без получения владения над ними. Для этого Rust предоставляет механизм
Компилятор статически гарантирует, что ссылки
// Эта функция берёт во владение упаковку и уничтожает её
fn eat_box_i32(boxed_i32: Box
println!("Уничтожаем упаковку в которой хранится {}", boxed_i32);
}
// Эта функция заимствует i32
fn borrow_i32(borrowed_i32: &i32) {
println!("Это число равно: {}", borrowed_i32);
}
fn main() {
// Создаём упакованное i32, и i32 на стеке
let boxed_i32 = Box::new(5_i32);
let stacked_i32 = 6_i32;
// Заимствуем содержимое упаковки. При этом мы не владеем ресурсом.
// Содержимое может быть заимствовано снова.
borrow_i32(&boxed_i32);
borrow_i32(&stacked_i32);
{