Avatar ·

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