代码之家  ›  专栏  ›  技术社区  ›  kalkronline

将<&mut MaybeUninit<T>>引脚插入<&mut T>引脚

  •  0
  • kalkronline  · 技术社区  · 2 年前

    我如何安全地到达 Pin<&mut T> 从…起 Pin<&mut MaybeUninit<T>> ,假设 MaybeUninit<T> 是否已初始化?

    1 回复  |  直到 2 年前
        1
  •  2
  •   kmdreko    2 年前

    它应该是安全的通过 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> 已初始化。

    推荐文章