有没有办法在 Rust 中将类型标记为不可丢弃?

nat*_*ate 4 rust

我想让它成为允许删除类型的编译器错误,而不是必须忘记它。我的用例是用于表示必须返回到其源进行清理的各种句柄的类型。这样 API 的用户就不会意外泄漏句柄。他们将被要求要么将句柄返回到其源,要么明确地忘记它。在源中,关联的资源将被清理并明确忘记句柄。

nnn*_*mmm 7

文章The Pain Of Real Linear Types in Rust提到了这一点。相关报价:

我见过的一种极端选择是实现drop()abort("this value must be used"). 所有“正确”的消费者然后 mem::forget价值,防止这个“破坏者炸弹”爆炸。这提供了严格必须使用值的动态版本。尽管它仍然容易受到析构函数泄漏的几种方式的影响,但这在实践中并不是一个重要的问题。大多数情况下它很糟糕,因为它是动态的,并且 Rust 用户需要静态验证。

最终,Rust 缺乏对这种类型的“适当”支持。

因此,假设您想要静态检查,答案是否定的。