Вызывается ли деструктор переназначить изменяемую переменную в ржавчине? - PullRequest
1 голос
/ 26 мая 2019

Предположим, что в ржавчине я определил изменчивую переменную, которая может быть сложной структурой, содержащей векторы или другие динамически распределяемые данные с чертой Drop.При переназначении этой переменной вызывается ли деструктор сразу после переназначения?

let mut x = some_complex_struct;
while some_condition {
...
x = new_complex_struct
...
}

Моя интерпретация: x получает право собственности на new_complex_struct, ранее принадлежавшее ему значение становится неизвестным, поэтому его деструктор будет вызываться сразу послепереназначение.Правильна ли моя интерпретация?

1 Ответ

3 голосов
/ 26 мая 2019

Моя интерпретация: x получает право собственности на new_complex_struct, ранее принадлежавшая ему стоимость становится неизвестной, поэтому ее деструктор будет вызван сразу после переназначения.Верна ли моя интерпретация?

Да. Это легко проверить:

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 являются детерминированными, поэтому такое поведение задано в камне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...