Avatar ·

إدارة عمر جامع القمامة في Rust: كيف تحرر الذاكرة بشكل صحيح؟

مرحباً بالجميع! أنا مبتدئ في Rust، انتقلت من Java حيث كل شيء بسيط — GC ينظف الذاكرة بنفسه. في Rust واجهت مفهوم الملكية والاقتراض، وواجهت مشكلة. أكتب لعبة صغيرة حيث توجد كائنات يجب أن تعيش لفترة غير محددة. على سبيل المثال، الرصاص، الأعداء، جزيئات التأثيرات. في Java كنت ببساطة أنشئ `new Bullet()`، وGC كان يحذفها بنفسه عندما تخرج عن النطاق. في Rust، المترجم يشتكي من عمر الحياة. إليك كود مبسط لا يتم ترجمته: ```rust struct Bullet { x: f32, y: f32, alive: bool, } struct Game { bullets: Vec, } impl Game { fn spawn_bullet(&mut self, x: f32, y: f32) { // خطأ: لا يمكن إرجاع مرجع إلى self.bullets let bullet = Bullet { x, y, alive: true }; self.bullets.push(bullet); } fn update(&mut self) { // يجب حذف الرصاص الميت self.bullets.retain(|b| b.alive); } } ``` المشكلة هي أنه عندما