Rust 如何为带有AtomicUsize字段的结构实现Drop?
我正在实现一个粗糙的实例计数器,但我遇到的问题更一般。我发现我无法为包含Rust 如何为带有AtomicUsize字段的结构实现Drop?,rust,Rust,我正在实现一个粗糙的实例计数器,但我遇到的问题更一般。我发现我无法为包含AtomicUsize字段的结构实现Drop。以下是我看到的: 使用std::sync::atomic::{AtomicUsize,Ordering}; #[允许(非大写字母)] 静态MyStruct_实例_计数器:AtomicUsize=AtomicUsize::new(0); #[衍生(默认)] 结构MyStruct{ id:u128, 计数器:原子化, } impl MyStruct{ fn新(id:u128)->Se
AtomicUsize
字段的结构实现Drop
。以下是我看到的:
使用std::sync::atomic::{AtomicUsize,Ordering};
#[允许(非大写字母)]
静态MyStruct_实例_计数器:AtomicUsize=AtomicUsize::new(0);
#[衍生(默认)]
结构MyStruct{
id:u128,
计数器:原子化,
}
impl MyStruct{
fn新(id:u128)->Self{
MyStruct_instance_counter.fetch_add(1,Ordering::SeqCst);
自我{
身份证件
…默认值::默认值()
}
}
}
MyStruct的impl Drop{
fn下降(&mut自我){
MyStruct_instance_counter.fetch_sub(1,Ordering::SeqCst);
}
}
error[E0509]:无法移出实现'Drop'特性的'MyStruct'类型
-->src/lib.rs:14:9
|
14 |/自我{
15 | | id,
16 | |…默认值::默认值()
17 | | }
| | ^
| | |
||uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
|发生移动是因为值的类型为'std::sync::atomic::AtomicUsize',该类型未实现'Copy'特性
虽然这个错误是有道理的,但我不确定如何解决它。对于包含未实现
Copy
特征的字段的任何结构,是否无法实现Drop
?我可以做些什么来跟踪施工/破坏?在总体方案中,我希望跟踪引用计数的对象,以确保它们不会因为循环而滞留。结果是使用了默认值
。虽然,现在我不确定如何解决这个问题。使用。
在一些地方和rust语言参考中,这里被称为“struct update syntax”。引用说它“从基表达式中移动或复制其余字段”
我怀疑,由于该结构使用了自定义的Drop
实现,因此可能无法将单个字段移出该结构。由于AtomicUsize
未实现Copy
,因此会导致错误
派生的
Default
实例也可能有问题。它在创建新结构时不会增加主计数器。您需要手动实现默认值
,以保持创建计数正确。这不是默认值
,因为您正在将字段移出实现删除的类型。您可以使用struct update语法。一些值。您只是碰巧使用了Default::Default()
作为某些值
。