РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
837 of 1245 menu

Класс 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

Смотрите также

  • класс Box,
    который представляет умный указатель для данных в куче
  • метод new,
    который создаёт новый Box с заданным значением
  • метод leak,
    который возвращает изменяемую ссылку и предотвращает освобождение памяти
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить