Функция write
Функция write из модуля std::ptr записывает значение в указанное место памяти. Она принимает первым параметром указатель на область памяти, а вторым - значение, которое нужно записать. Функция не читает и не удаляет старое содержимое памяти, что делает её полезной для инициализации неинициализированной памяти. Поскольку функция работает с сырыми указателями, её вызов является небезопасным и требует блока unsafe.
Синтаксис
unsafe { std::ptr::write(dst, src) }
Пример
Давайте запишем число 12345 в неинициализированную память и прочитаем его:
use std::ptr;
fn main()
{
let mut value: i32 = 0;
let ptr = &mut value as *mut i32;
unsafe {
ptr::write(ptr, 12345);
println!("{}", *ptr);
}
}
Результат выполнения кода:
12345
Пример
Давайте запишем строку "abcde" в неинициализированную память с помощью MaybeUninit:
use std::mem::MaybeUninit;
use std::ptr;
fn main()
{
let mut uninit: MaybeUninit<String> = MaybeUninit::uninit();
let ptr = uninit.as_mut_ptr();
unsafe {
ptr::write(ptr, String::from("abcde"));
let value = uninit.assume_init();
println!("{}", value);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте запишем элемент вектора по указателю и выведем весь вектор:
use std::ptr;
fn main()
{
let mut v = vec![1, 2, 3, 4, 5];
let ptr = v.as_mut_ptr();
unsafe {
ptr::write(ptr.add(2), 99);
println!("{:?}", v);
}
}
Результат выполнения кода:
[1, 2, 99, 4, 5]
Смотрите также
-
функция
read,
которая читает значение из указателя -
функция
write_unaligned,
которая записывает значение по невыровненному указателю -
метод
write,
который записывает значение вMaybeUninit -
функция
drop_in_place,
которая уничтожает значение по указателю