Функция zeroed класса MaybeUninit
Функция zeroed класса MaybeUninit создаёт значение типа MaybeUninit<T>,
память которого заполнена нулевыми байтами. Это может быть полезно,
когда нужно получить буфер, готовый к записи, или когда нулевое значение
является корректным начальным состоянием для типа T.
Функция не принимает параметров и возвращает MaybeUninit<T>.
Обратите внимание, что полученное значение всё ещё считается неинициализированным
с точки зрения типа, и для доступа к нему требуется unsafe.
Синтаксис
MaybeUninit::<T>::zeroed()
Пример
Давайте создадим значение типа MaybeUninit<i32> с помощью функции zeroed
и проверим, что все байты равны нулю:
use std::mem::MaybeUninit;
fn main()
{
let value: MaybeUninit<i32> = MaybeUninit::zeroed();
let bytes = unsafe { std::slice::from_raw_parts(value.as_ptr() as *const u8, 4) };
println!("{:?}", bytes);
}
Результат выполнения кода:
[0, 0, 0, 0]
Пример
Давайте создадим значение типа MaybeUninit<[u8; 5]> и убедимся,
что массив содержит только нули:
use std::mem::MaybeUninit;
fn main()
{
let value: MaybeUninit<[u8; 5]> = MaybeUninit::zeroed();
let arr = unsafe { value.assume_init() };
println!("{:?}", arr);
}
Результат выполнения кода:
[0, 0, 0, 0, 0]
Смотрите также
-
класс
MaybeUninit,
который представляет неинициализированное значение -
функция
uninit,
которая создаёт полностью неинициализированное значение -
функция
new,
которая создаёт инициализированное значение MaybeUninit -
функция
zeroed,
которая создаёт значение с нулевыми байтами без обёртки MaybeUninit