假设我有一个结构
struct Foo {
a: Box<usize>,
b: Box<usize>,
}
我想在像这样删除 Foo 实例时对 a 和 b 做一些事情
impl Drop for Foo {
fn drop(&mut self) {
println!("{}", self.a + self.b);
}
}
在这个
drop
之后盒子a和b会掉落吗?
我的 drop 实现会覆盖 drop 的默认实现吗?比如这里的实际工作流程是什么?
此外,如果我手动调用
foo.drop()
之类的东西,这只会执行我实现的操作,但实际上不会删除两个框。我如何确保它们被丢弃?
是的,Rust 的 drop glue 将确保
Foo
的字段在您的自定义 drop 实现之后按照声明的顺序被删除。所以,在这种情况下,当 Foo
被丢弃时:
<Foo as Drop>::drop()
在 Foo
上被调用。Foo
的a
掉落了。Foo
的b
掉落了。