Unsafe Rust gewährt direkten Speicherzugriff über das hinaus, was sicheres Rust erlaubt. Rohe Zeiger (*const T, *mut T) können nur in unsafe Blöcken dereferenziert werden, was Risiken von undefiniertem Verhalten anerkennt. MaybeUninit<T> ist essentiell um potentiell nicht initialisierten Speicher darzustellen—es führt nicht den Destruktor von T aus und nimmt keinen gültigen Wert an. Dieses Pattern ist entscheidend für FFI-Grenzen, benutzerdefinierte Allocatoren und performance-kritischen Code, der Zero-Initialisierung Overhead vermeiden muss. Stellen Sie immer sicher, dass MaybeUninit Daten vor dem Lesen korrekt initialisiert sind.
use std::mem::MaybeUninit;use std::ptr;fn demo_raw_pointer() {let mut value: i32 = 42;let ptr = &mut value as *mut i32;unsafe {println!("Original: {}", *ptr);*ptr = 100;println!("Modified: {}", *ptr);}}fn demo_maybe_uninit() {const SIZE: usize = 5;let mut buffer = [MaybeUninit::<u64>::uninit(); SIZE];for i in 0..SIZE {buffer[i] = MaybeUninit::new((i as u64) * 10);}let values = unsafe { ptr::read(buffer.as_ptr() as *const [u64; SIZE]) };println!("Buffer: {:?}", values);}fn main() {demo_raw_pointer();demo_maybe_uninit();}