當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。