0

外部の理由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 will が巻き戻されるときpanic!に呼び出されることを考えると、実装内のいずれかが中止される可能性があります。droppanic!drop

しかし、その「可能性が高い」だけでは、このシナリオを予想する必要がある (そして処理できる) かどうかが十分に明確になりません。

4

0 に答える 0