ManuallyDrop <Box <T >>是否具有mem :: uninitialized定义的行为?

Tim*_*ann 6 unsafe undefined-behavior rust

我有一个[ManuallyDrop<Box<T>>]懒洋洋地填充的数组.为了实现这一点,我用"初始化"数组ManuallyDrop::new(mem::uninitialized()).

只要我只调用ManuallyDrop::drop()初始化元素,这是明确定义的行为吗?

Pet*_*all 2

如果您不从未初始化的内存中读取数据或创建指向它的指针,那么这不应该是 UB。

您需要进行一些仔细的记录,以禁止访问未初始化的项目,并且只删除已初始化的项目。在存在未初始化内存的情况下添加新项目需要使用 来完成ptr::write(),以避免底层内存的无效删除。但是,如果您覆盖现有的有效值,则不应使用ptr::write因为您需要正确删除该值。