7.1 MaybeUninit<T>(可能未初始化)

MaybeUninit(可能未初始化) — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/unsafe-deep-dive/initialization/maybeuninit.html

7.1 MaybeUninit(可能未初始化)

MaybeUninit<T> 允许 Rust 引用未初始化的内存。

1
2
3
4
5
6
7
8
// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0
use std::mem::MaybeUninit;

fn main() {
    let uninit = MaybeUninit::<&i32>::uninit();
    println!("{uninit:?}");
}

「Safe Rust 无法引用可能未初始化的数据。」

「然而,所有数据进入程序时都是未初始化的。」

「因此,我们需要类型系统中的某种桥梁,让内存能够完成过渡。MaybeUninit<T> 就是这种类型。」

「MaybeUninit<T> 与 Option<T> 类型非常相似,尽管语义截然不同。对 MaybeUninit<T> 而言,Option::None 的等价物是未初始化内存,而向其中写入是安全的。」

「从可能未初始化的内存中读取极其危险。」


7.1.1 未初始化数组

01-未初始化数组 — Comprehensive Rust

7.1.2 MaybeUninit::zeroed() 方法

02-MaybeUninit::zeroed() 方法 — Comprehensive Rust

7.1.3 ptr::write 与赋值

03-ptr::write 与赋值 — Comprehensive Rust

最后修改 August 11, 2026: 更新 (70a5af133)