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

Функция drop_in_place

Функция drop_in_place уничтожает значение, на которое указывает сырой указатель. Она вызывает деструктор типа T, освобождая все связанные с значением ресурсы, но не освобождает память, в которой хранится само значение. Параметром функция принимает сырой указатель *mut T на значение, которое нужно уничтожить. Функция является unsafe, так как при неправильном использовании может привести к двойному освобождению ресурсов или обращению к невалидной памяти.

Синтаксис

unsafe { std::ptr::drop_in_place(ptr) }

Пример

Давайте создадим значение типа String и уничтожим его через drop_in_place:

fn main() { let mut s = String::from("abcde"); let ptr = &mut s as *mut String; unsafe { std::ptr::drop_in_place(ptr); } println!("String dropped"); }

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

"String dropped"

Пример

Давайте рассмотрим пример с массивом, где drop_in_place уничтожит только один элемент:

fn main() { let mut arr = vec!["a", "b", "c", "d", "e"]; let ptr = &mut arr[0] as *mut &str; unsafe { std::ptr::drop_in_place(ptr); } println!("First element dropped"); }

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

"First element dropped"

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

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