我希望将允许丢弃类型的行为变成编译错误,必须将其遗忘。我的用例是用于表示某种句柄的类型,必须将其返回到源以进行清理。这样,API的用户就无法意外泄漏句柄。他们要么必须将句柄返回给其源,要么必须明确地遗忘它。在源中,相关资源将被清除并明确遗忘该句柄。
drop()
实现为abort("this value must be used")
。
然后"proper consumers" mem::forget
这个值,防止这个"destructor bomb"触发。这提供了动态版本的严格必须使用的值。虽然它仍然容易受到析构函数泄露的少数方式的影响,
但在实践中,这不是一个重要的问题。主要是因为它是动态的,而Rust用户想要静态验证。”FnOnce(Handle) -> Handle
),只要没有其他创建句柄的方法。|h: Handle| { drop(h); let (_, rx) = mpsc::channel::<Handle>(); rx.recv().unwrap() }
- Michał Trybus|h: Handle| { drop(h); panic!() }
吗? - Solomon Ucko|h: Handle| { drop(h); let (tx, rx) = mpsc::channel::<Handle>(); rx.recv().unwrap() }
:) - Michał Trybusunwrap
就匆忙下结论了。所以是 loop {}
。基本上,它必须发散,不能正常返回。 - Solomon Uckoh
实际上被丢弃了。 - Michał Trybus
'static
引用,而不是通过值构造它并依赖用户做正确的事情呢? - trent