如果出现“恐慌”,该怎么办应该怎么办?反正我可以释放其他资源吗?

问题描述

由于外部原因,我有一个使用MaybeUninitunsafe的简单资源:

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 (将#修改为@)