当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust MaybeUninit.zeroed用法及代码示例


本文简要介绍rust语言中 std::mem::MaybeUninit.zeroed 的用法。

用法

pub fn zeroed() -> MaybeUninit<T>

在未初始化状态下创建一个新的 MaybeUninit<T>,内存被 0 字节填充。这取决于T 是否已经进行了正确的初始化。例如,MaybeUninit<usize>::zeroed() 已初始化,但 MaybeUninit<&'static i32>::zeroed() 未初始化,因为引用不能为空。

请注意,删除 MaybeUninit<T> 永远不会调用 T 的删除代码。您有责任确保 T 在初始化后被丢弃。

示例

该函数的正确用法:用零初始化一个结构体,该结构体的所有字段都可以将bit-pattern 0作为有效值。

use std::mem::MaybeUninit;

let x = MaybeUninit::<(u8, bool)>::zeroed();
let x = unsafe { x.assume_init() };
assert_eq!(x, (0, false));

不正确该函数的用法:调用x.zeroed().assume_init()0不是以下类型的有效 bit-pattern:

use std::mem::MaybeUninit;

enum NotZero { One = 1, Two = 2 }

let x = MaybeUninit::<(u8, NotZero)>::zeroed();
let x = unsafe { x.assume_init() };
// Inside a pair, we create a `NotZero` that does not have a valid discriminant.
// This is undefined behavior. ⚠️

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::mem::MaybeUninit.zeroed。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。