我如何安全地到达 Pin<&mut T> 从…起 Pin<&mut MaybeUninit<T>> ,假设 MaybeUninit<T> 是否已初始化?
Pin<&mut T>
Pin<&mut MaybeUninit<T>>
MaybeUninit<T>
它应该是安全的通过 Pin::map_unchecked_mut :
Pin::map_unchecked_mut
let pin_uninit_t: Pin<&mut MaybeUninit<T>> = ...; let pin_t: Pin<&mut T> = unsafe { pin_uninit_t.map_unchecked_mut(|m| m.assume_init_mut()) };
功能是 unsafe 因为您被赋予了对某个值的不受保护的可变访问权限,所以您不能移动该值,但我们不会移动该值( assume_init_mut 是一个简单的引用强制转换),因此假设 MaybeUninit<T> 已初始化。
unsafe
assume_init_mut