Rust 如果我不再恐慌,我能(也应该)做什么?我可以释放其他资源吗?

Rust 如果我不再恐慌,我能(也应该)做什么?我可以释放其他资源吗?,rust,destructor,panic,drop,exception-safety,Rust,Destructor,Panic,Drop,Exception Safety,我有一个简单的资源,出于外部原因使用maybeinit和safe: pub结构资源 } 恳求{ fn下降(&mut自我){ 不安全{//Safety:`maybeuniit`始终在此处初始化。 std::ptr::drop_in_place(self.repr.as_mut_ptr()); } } } 我想,如果T::drop()恐慌,那么RefMut就会泄漏,毒害它的RefCell。我怎样才能防止这种情况发生?这样做是否惯用?各国: 考虑到这一点,恐慌将在其展开时调用drop,任何恐慌执行可

我有一个简单的资源,出于外部原因使用
maybeinit
safe

pub结构资源
}
恳求{
fn下降(&mut自我){
不安全{//Safety:`maybeuniit`始终在此处初始化。
std::ptr::drop_in_place(self.repr.as_mut_ptr());
}
}
}
我想,如果
T::drop()
恐慌,那么
RefMut
就会泄漏,毒害它的
RefCell
。我怎样才能防止这种情况发生?这样做是否惯用?各国:

考虑到这一点,
恐慌
将在其展开时调用
drop
,任何
恐慌拖放中的code>执行可能会中止


但“可能”并不能说明我是否应该期待(并能处理)这种情况。

“但“可能”并不能说明我是否应该期待(并能处理)这种情况。“双重恐慌(在退绕期间恐慌)是一种艰难的中止,你确实无法处理它。@Masklin“单一”呢?”在普通的
drop
中发生的恐慌(这不是由恐慌引起的)?
drop
在展开过程中被调用,而不管展开是由
drop
还是其他非drop代码触发的。通常,您应该编写
drop::drop
假设您调用的任何其他
drop
,隐式或显式,不会惊慌。对于其他情况,您可以选中
std::thread::panicking()
,并避免出现恐慌。