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

Функция needs_drop

Функция needs_drop проверяет, требует ли указанный тип вызова деструктора при удалении значения. Она возвращает true, если тип нуждается в вызове деструктора, и false в противном случае. Параметром функция принимает обобщённый тип T, для которого выполняется проверка.

Функция является безопасной и не требует блока unsafe при вызове. Она полезна при написании низкоуровневого кода, когда необходимо знать, можно ли пропустить вызов деструктора без утечки ресурсов.

Синтаксис

std::mem::needs_drop::<T>()

Пример

Давайте проверим, требует ли тип i32 вызова деструктора:

fn main() { let res = std::mem::needs_drop::<i32>(); println!("{}", res); }

Результат выполнения кода:

false

Тип i32 не содержит ресурсов, требующих освобождения, поэтому деструктор не нужен.

Пример

Давайте проверим, требует ли тип String вызова деструктора:

fn main() { let res = std::mem::needs_drop::<String>(); println!("{}", res); }

Результат выполнения кода:

true

Тип String владеет динамической памятью, поэтому при удалении значения требуется вызов деструктора для освобождения памяти.

Пример

Давайте проверим, требует ли вектор целых чисел вызова деструктора:

fn main() { let res = std::mem::needs_drop::<Vec<i32>>(); println!("{}", res); }

Результат выполнения кода:

true

Тип Vec<i32> управляет буфером в куче, поэтому нуждается в вызове деструктора.

Пример

Давайте проверим, требует ли ссылка на строку вызова деструктора:

fn main() { let res = std::mem::needs_drop::<&str>(); println!("{}", res); }

Результат выполнения кода:

false

Ссылка не владеет данными, поэтому деструктор для неё не требуется.

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

  • функция drop,
    которая явно вызывает деструктор значения
  • функция forget,
    которая предотвращает вызов деструктора
  • функция drop_in_place,
    которая вызывает деструктор по указателю
  • тип ManuallyDrop,
    который управляет вызовом деструктора вручную
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить