Функция 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"