Функция take
Функция take из модуля std::ptr извлекает значение
из указателя, заменяя его на значение по умолчанию.
Параметром функция принимает указатель на значение,
которое нужно извлечь. Функция является небезопасной,
так как работает с сырыми указателями и требует гарантий
корректности со стороны программиста.
Синтаксис
unsafe fn take<T>(dest: *mut T) -> T
Пример
Давайте извлечём значение из указателя, заменив его на значение по умолчанию:
use std::ptr;
fn main()
{
let mut value = 12345;
let ptr = &mut value as *mut i32;
unsafe
{
let old = ptr::take(ptr);
println!("{}", old);
println!("{}", *ptr);
}
}
Результат выполнения кода:
12345
0
Пример
Давайте извлечём значение типа String из указателя:
use std::ptr;
fn main()
{
let mut value = String::from("abcde");
let ptr = &mut value as *mut String;
unsafe
{
let old = ptr::take(ptr);
println!("{}", old);
println!("{}", value);
}
}
Результат выполнения кода:
"abcde"
""
Пример
Давайте извлечём значение из указателя на элемент массива:
use std::ptr;
fn main()
{
let mut arr = vec![1, 2, 3, 4, 5];
let ptr = &mut arr[2] as *mut i32;
unsafe
{
let old = ptr::take(ptr);
println!("{}", old);
println!("{}", arr[2]);
}
}
Результат выполнения кода:
3
0