问题描述
由于外部原因,我有一个使用MaybeUninit
和unsafe
的简单资源:
pub struct Resource<'a,T> {
repr: std::cell::RefMut<'a,std::mem::MaybeUninit<T>>
}
impl<'a,T> Drop for Resource<'a,T> {
fn drop(&mut self) {
unsafe { // Safety: `MaybeUninit<T>` is always initialized here.
std::ptr::drop_in_place(self.repr.as_mut_ptr());
}
}
}
我猜想,如果T::drop()
出现恐慌,则RefMut
会泄漏,中毒其RefCell
。我该如何预防呢? documentation指出:
鉴于
panic!
将在展开时调用drop
,因此panic!
实现中的任何drop
都可能中止。
但是这种“可能”并不能使我是否应该期望(并能够处理)这种情况变得不够清楚。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)