Rust 在锈迹中是否有方法将一种类型标记为不可掉落?

Rust 在锈迹中是否有方法将一种类型标记为不可掉落?,rust,Rust,我想让它成为一个编译器错误,允许删除一个类型,相反,它必须被忘记。我的用例用于表示排序句柄的类型,该句柄必须返回到其源进行清理。这样,API的用户就不会意外地泄漏句柄。他们需要要么将句柄返回到其源,要么显式地忘记它。在源代码中,关联的资源将被清理,句柄将被显式遗忘。本文提到了这一点。相关报价: 我看到的一个极端选择是将drop()实现为 中止(“必须使用此值”)。那么,所有“合适”的消费者 mem::忘记值,防止这个“析构函数炸弹”爆炸 关这提供了strict必须使用值的动态版本。 尽管它仍然容

我想让它成为一个编译器错误,允许删除一个类型,相反,它必须被忘记。我的用例用于表示排序句柄的类型,该句柄必须返回到其源进行清理。这样,API的用户就不会意外地泄漏句柄。他们需要要么将句柄返回到其源,要么显式地忘记它。在源代码中,关联的资源将被清理,句柄将被显式遗忘。

本文提到了这一点。相关报价:

我看到的一个极端选择是将
drop()
实现为
中止(“必须使用此值”)
。那么,所有“合适”的消费者
mem::忘记
值,防止这个“析构函数炸弹”爆炸 关这提供了strict必须使用值的动态版本。 尽管它仍然容易受到破坏程序泄漏的几种方式的影响, 这在实践中并不是一个重要的问题。大多数情况下,它只是很臭 因为它是动态的,用户需要静态验证

归根结底,锈对这种类型缺乏“适当”的支撑


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

您可以要求用户传递一个返回句柄的函数对象(
FnOnce(handle)->handle
),只要没有其他方法创建句柄

我对Rust不太精通,但是否可以将句柄包装在虚拟的
struct
中,并使句柄的源代码从此句柄结构借用一些虚拟引用?这样,如果删除句柄,则源代码将生成
寿命不够长的
错误,这不是自描述的,但这种行为可以在注释中描述。@AlexLarionov是的,这必须是一个运行时错误。谢谢,我得出了相同的结论,即在删除时感到恐慌,希望有一种像send这样的特性可以将一个类型标记为不可删除。为什么不先在构造函数中泄漏它,然后返回一个
静态的
引用,而不是通过值来构造它,并依靠用户做正确的事情呢?