7 个不稳定版本 (3 个破坏性更新)
使用旧 Rust 2015
0.4.2 | 2019年5月23日 |
---|---|
0.4.1 | 2019年4月1日 |
0.4.0 | 2019年1月22日 |
0.3.0 | 2018年12月1日 |
0.1.1 | 2018年1月26日 |
#2527 in Rust 模式
每月下载量:2,002
在 58 个crate中使用(直接使用9个)
7KB
60 行
相关
一个小型实用类型,用于模拟必须使用类型。它们与 #[must_use]
属性不同,拥有实例的用户必须将其发送到别处或手动 dispose
它。
这适用于需要手动销毁但无法通过 Drop
特质实现的类型。例如,从某些源创建的资源处理器,并且必须将其返回到同一源。
用法
Relevant
类型是不可丢弃的。由于当前实现的限制,当它被丢弃时会引发恐慌。为了使类型不可丢弃,它必须包含不可丢弃的类型(例如 Relevant
类型)。
示例
struct SourceOfFoos {
handle: u64,
}
/// Foo must be destroyed manually.
struct Foo {
handle: u64,
relevant: Relevant,
}
/// Function from C library to create `Foo`
/// Access to same source must be synchronized.
extern "C" create_foo(source: u64) -> u64;
/// Function from C library to destroy `Foo`.
/// Access to same source must be synchronized.
extern "C" destroy_foo(source: u64, foo: u64) -> u64;
impl SourceOfFoos {
fn create_foo(&mut self) -> Foo {
Foo {
handle: create_foo(self.handle),
relevant: Relevant,
}
}
fn destroy_foo(&mut self, foo: Foo) {
destroy_foo(self.handle, foo.handle);
foo.relevant.dispose();
}
}
现在不可能意外丢弃 Foo
并泄漏句柄。当然,总是可以显式地使用 std::mem::forget
相关类型。但这将是故意的泄露。
依赖项
~8–740KB
~15K SLoC