结构和成员之间的放置顺序是什么?



如果我有:

struct Bar {}
struct Foo {
bar: Bar
}
impl Drop for Foo {
fn drop(&mut self) {}
}
impl Drop for Bar {
fn drop(&mut self) {}
}
fn main() {
let x = Foo { bar: Bar {} };
}

哪个滴叫先,Foo滴还是Bar滴?

Foo的下降将在Bar的下降之前调用。

如果反过来,&mut self将指部分销毁的物体,self.bar将是无效的。这对于Drop的目标没有意义,因为在被销毁之前过于执行逻辑。

从参考:

类型T的析构函数包括:

  1. 如果T: Drop,则调用<T as std::ops::Drop>::drop
  2. 递归运行其所有字段的析构函数。

换句话说,在您的示例中,当x超出范围时,Foo::drop会在Bar::drop(以及Foo可能具有的任何其他字段)之前调用。

不过,最简单的方法是自己尝试一下。

最新更新