Класс Box
Класс Box - это умный указатель, который
размещает данные в куче, а не в стеке. Сам
Box хранит лишь указатель на данные в куче,
поэтому его размер фиксирован и известен на этапе
компиляции. Это позволяет использовать Box
для рекурсивных типов, больших структур данных и
передачи владения без копирования самих данных.
При выходе из области видимости Box
автоматически освобождает память в куче.
Синтаксис
let b = Box::new(value);
Пример
Давайте создадим Box с числом и выведем его значение:
fn main()
{
let b = Box::new(5);
println!("{}", b);
}
Результат выполнения кода:
5
Пример
Давайте создадим Box со строкой и выведем её значение:
fn main()
{
let b = Box::new("abcde");
println!("{}", b);
}
Результат выполнения кода:
"abcde"
Пример
Давайте создадим Box с вектором и выведем его содержимое:
fn main()
{
let b = Box::new(vec![1, 2, 3, 4, 5]);
println!("{:?}", b);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте создадим рекурсивный тип с помощью Box:
enum List
{
Cons(i32, Box<List>),
Nil,
}
fn main()
{
let list = List::Cons(1,
Box::new(List::Cons(2,
Box::new(List::Nil))));
if let List::Cons(val, _) = list
{
println!("{}", val);
}
}
Результат выполнения кода:
1