Коробка для значения в куче в Rust
Когда одно значение должно жить в куче, его оборачивают в коробку. Сама коробка имеет фиксированный размер на стеке, а тяжелое содержимое лежит отдельно. Так удобно передавать владение большим данным и хранить их, не раздувая кадр стека.
В разделе про объект трейта коробка уже встречалась как оболочка для неизвестного размера. Здесь тот же тип работает сам по себе: внутри может быть обычное число, строка или своя структура с известным размером.
Создадим коробку с целым и прочитаем число через звездочку:
fn main() {
let b = Box::new(7);
let n = *b;
println!("{}", n);
}
Переменная b владеет коробкой, а
запись *b копирует значение из
кучи. Пока живет b, память под
семеркой не освобождается.
Тот же прием подойдет для своей структуры:
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Box::new(Point { x: 1, y: 2 });
println!("{} {}", p.x, p.y);
}
Дано число:
let num = 12;
Положите литерал в коробку, прочитайте его через разыменование и выведите на экран.
Дана структура:
struct Label {
code: i32,
}
Соберите значение с полем code: 5
в коробке и выведите поле из main.
Скажите, почему размер переменной типа коробки не растет вместе с размером структуры внутри кучи.