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


Rust MaybeUninit.as_ptr用法及代码示例


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

用法

pub fn as_ptr(&self) -> *const T

获取指向所包含值的指针。除非初始化MaybeUninit<T>,否则从此指针读取或将其转换为引用是未定义的行为。写入该指针(非传递性)指向的内存是未定义的行为(除了在 UnsafeCell<T> 内)。

例子

此方法的正确用法:

use std::mem::MaybeUninit;

let mut x = MaybeUninit::<Vec<u32>>::uninit();
x.write(vec![0, 1, 2]);
// Create a reference into the `MaybeUninit<T>`. This is okay because we initialized it.
let x_vec = unsafe { &*x.as_ptr() };
assert_eq!(x_vec.len(), 3);

此方法的错误使用:

use std::mem::MaybeUninit;

let x = MaybeUninit::<Vec<u32>>::uninit();
let x_vec = unsafe { &*x.as_ptr() };
// We have created a reference to an uninitialized vector! This is undefined behavior. ⚠️

(请注意,有关对未初始化数据的引用的规则尚未最终确定,但在确定之前,建议避免使用它们。)

相关用法


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