假设MaybeUninit<T>已初始化,如何安全地从Pin<&mut MaybeUninit<T>>获取Pin<&mut T>?
MaybeUninit<T>
Pin<&mut MaybeUninit<T>>
Pin<&mut T>
qzlgjiam1#
通过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
1条答案
按热度按时间qzlgjiam1#
通过
Pin::map_unchecked_mut
应该是安全的:字符串
这个函数是
unsafe
,因为你被赋予了一个不受保护的可变访问权,你不能移动这个值,但是我们没有移动这个值(assume_init_mut
是一个简单的引用转换),所以假设MaybeUninit<T>
被初始化是安全的。