用户定义的结构删除是否也在 Rust 中隐式删除其字段?

问题描述 投票:0回答:1

假设我有一个结构

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 raii
1个回答
0
投票

是的,Rust 的 drop glue 将确保

Foo
的字段在您的自定义 drop 实现之后按照声明的顺序被删除。所以,在这种情况下,当
Foo
被丢弃时:

  • <Foo as Drop>::drop()
    Foo
    上被调用。
  • Foo
    a
    掉落了。
  • Foo
    b
    掉落了。
© www.soinside.com 2019 - 2024. All rights reserved.