在rust中,假设我定义了一个可变变量,该变量可能是一些复杂的结构,其中包含具有Drop
特征的向量或其他动态分配的数据。重新分配该变量时,在重新分配后是否立即调用析构函数?
let mut x = some_complex_struct;
while some_condition {
...
x = new_complex_struct
...
}
我的解释是x
拥有new_complex_struct
的所有权,其先前拥有的价值不再拥有,因此其析构函数将在重新分配后立即被调用。我的解释正确吗?
答案 0 :(得分:3)
我的解释是
x
拥有new_complex_struct
的所有权,其先前拥有的价值不再拥有,因此其析构函数将在重新分配后立即被调用。我的解释正确吗?
是的。 This can easily be checked:
struct Foo;
impl Drop for Foo {
fn drop(&mut self) {
println!("Foo::drop");
}
}
fn main() {
let mut f = Foo;
for i in 0..5 {
println!("Before {}", i);
f = Foo;
println!("After {}", i);
}
}
将按预期打印:
Before 0
Foo::drop
After 0
Before 1
Foo::drop
After 1
Before 2
Foo::drop
After 2
Before 3
Foo::drop
After 3
Before 4
Foo::drop
After 4
Foo::drop
Rust中的析构函数是确定性的,因此这种行为是一成不变的。