Lifetimes
ยินดีต้อนรับสู่ “ด่านปราบเซียน” ของ Rust ครับ! หลักการมันง่ายมาก: “ของต้องมีอยู่จริง ตราบเท่าที่เรายังใช้มันอยู่”
ลองนึกภาพว่าเราไปร้านหนังสือแล้วยืมหนังสือมาอ่าน เราต้องคืนก่อนที่ร้านจะปิด ถ้าร้านปิดไปแล้วแต่เรายังถือหนังสืออยู่ นั่นก็คือปัญหา! Lifetimes ใน Rust ก็คล้ายๆ กัน - Reference ต้องไม่ outlive ข้อมูลที่มันอ้างถึง
1. Lifetimes คืออะไร?
Section titled “1. Lifetimes คืออะไร?”ใน Rust ทุก Reference (&T) จะมี Lifetime (ช่วงเวลาที่มันมีชีวิตอยู่) เสมอ
ส่วนใหญ่ Compiler รู้เอง แต่บางทีมันงงว่า “ตกลงอันนี้จะอยู่นานแค่ไหน?“
1.1 Dangling Reference - ปัญหาหลัก
Section titled “1.1 Dangling Reference - ปัญหาหลัก”fn main() { let r; { let x = 5; // ============================================ // ถ้าเราทำแบบนี้ (uncomment ดู) // r = &x; // จะ Error! เพราะ x จะตายก่อน r // ============================================ } // ถ้า r ชี้ไปหา x ที่ตายแล้ว = Dangling Reference! // println!("{}", r); // UB in other languages, Error in Rust
// ============================================ // Fixed version - x อยู่ยาวพอ // ============================================ let x = 5; let r = &x; println!("{}", r); // OK! x ยังมีชีวิต}เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม
ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด
Login with Google