Déplacement

En Rust, généralement, utiliser une valeur la déplace, comme std::move en C++11.

Mais les règles sont un peu différentes :

  • Tous les types supportent le déplacement, on ne peut pas l’interdire.
  • Le déplacement est toujours un memcpy() (~facile à éliminer pour l’optimiseur).
  • L’absence de use-after-move est vérifiée, donc le code suivant ne compile pas.
#![allow(unused)]
fn main() {
// Définition d'une valeur non copiable
let numbers = vec![1.2, 3.4, 5.6];

// Utilisation de la valeur => Déplacement
for x in numbers {
    println!("{x}");
}

// Réutilisation après déplacement => Erreur !
println!("{numbers:?}");
}