Gestion de la durée de vie du ramasse-miettes en Rust : comment libérer correctement la mémoire ?
Bonjour à tous ! Je suis débutant en Rust, je viens de Java où tout est simple — le GC nettoie la mémoire tout seul. En Rust, j'ai rencontré les concepts de ownership et borrowing, et j'ai un problème.
J'écris un petit jeu où il y a des objets qui doivent vivre pendant une durée indéterminée. Par exemple, des balles, des ennemis, des particules d'effets. En Java, je créerais simplement `new Bullet()`, et le GC les supprimerait tout seul quand ils sortent de la portée. En Rust, le compilateur se plaint à propos des lifetimes.
Voici un code simplifié qui ne compile pas :
```rust
struct Bullet {
x: f32,
y: f32,
alive: bool,
}
struct Game {
bullets: Vec,
}
impl Game {
fn spawn_bullet(&mut self, x: f32, y: f32) {
// Erreur : je ne peux pas retourner une référence à self.bullets
let bullet = Bullet { x, y, alive: true };
self.bullets.push(bullet);
}
fn update(&mut self) {
// Il faut supprimer les balles mortes
self.bullets.retain(|b| b.alive);
}
}
```
Le problème est que lorsque je