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()
作为
某些值