rust - 如果 Drop 出现恐慌,我可以(并且应该)做什么?无论如何我可以释放其他资源吗?
问题描述
我有一个简单的资源,它使用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
。我怎样才能防止这种情况发生,这样做会不会是惯用的?该文档指出:
鉴于 a
panic!
将在展开时调用drop
,因此实现中的任何panic!
一个drop
都可能中止。
但是这个“可能”并没有足够清楚地说明我是否应该期待(并且可以处理)这种情况。
解决方案
推荐阅读
- java - 如何迭代Hashmap并与同一个Hashmap中的其他键进行组合以比较它们的对象
- javascript - 在 Material-UI 中从 textview 中选择项目后如何更改字体颜色
- javascript - 如何在 JavaScript 中将特殊符号转换为表情符号?
- java - Java JsonPath 函数“indexOf”给出异常:函数参数:“indexOf”未正确关闭
- python - Pandas replace() 所有掩码值
- r - 如何组合“geom_text”调用的斜体和非斜体组件。将 `geom_text` 标签添加到一系列 `facet_grid` 散点图
- java - 使用 PageRequest 上的模型参考排序不起作用
- android - 如何从 Jetpack compose 中的 drawable 加载图像?
- firebase - firebase admin sdk 身份验证在本地失败,getaddrinfo ENOTFOUND
- tensorflow - 如何将 VGG 从暗网转换为张量流?