Current date May 18, 2026
Tự học Rust

Tự học Rust – Bài 18: Lifetimes – Đảm bảo tham chiếu hợp lệ

URL copied
Share URL copied
Tự học Rust - Bài 18: Lifetimes - Đảm bảo tham chiếu hợp lệ
Tự học Rust – Bài 18: Lifetimes – Đảm bảo tham chiếu hợp lệ

1. Lifetimes là gì?

Mỗi tham chiếu trong Rust đều có một Lifetime, tương ứng với phạm vi mà tham chiếu đó hợp lệ. Hầu hết thời gian, Rust có thể tự suy luận Lifetime (Lifetime Elision), nhưng đôi khi chúng ta cần phải ghi chú tường minh khi trình biên dịch không thể tự đoán được mối quan hệ giữa các tham chiếu.

2. Ký hiệu Lifetime tường minh

Ký hiệu Lifetime bắt đầu bằng một dấu nháy đơn `’`, ví dụ `’a`.

// Hàm trả về tham chiếu có thời gian sống lâu nhất
fn longest(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

Ý nghĩa của `’a` ở đây là: Giá trị trả về sẽ sống lâu bằng với tham chiếu có thời gian sống ngắn nhất trong số `x` và `y`.

3. Static Lifetime (`’static`)

Một trường hợp đặc biệt là `’static`, có nghĩa là tham chiếu đó sống suốt toàn bộ thời gian chạy của chương trình. Các chuỗi văn bản cố định (string literals) mặc định đều có `’static`.

let s: &'static str = "Tôi sống mãi mãi.";

4. Tại sao chúng ta cần quan tâm?

Việc ghi chú Lifetimes giúp ngăn chặn lỗi Dangling Reference (Tham chiếu treo) – trường hợp một biến cố gắng truy cập vào vùng nhớ đã bị xóa bỏ. Đây là “vũ khí bí mật” giúp Rust cực kỳ an toàn mà các ngôn ngữ như C/C++ không có được.

Lời kết Bài 18

Lifetimes có thể là khái niệm gây khó hiểu nhất với người mới bắt đầu, nhưng bạn chỉ cần nhớ: “Nó sinh ra để đảm bảo bạn không dùng một thứ gì đó đã bị hủy”. Ở bài tiếp theo, chúng ta sẽ học về Smart Pointers – những con trỏ thông minh giúp quản lý bộ nhớ linh hoạt hơn.

Hẹn gặp lại các bạn!

Share URL copied

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Active0
AI3
AI & Automation10

Exclusives

Lifestyle

Related Articles

Tự học Rust – Bài 20: Concurrency – Đa luồng an toàn tuyệt đối

Khám phá cách Rust xử lý lập trình đa luồng mà không...

Tự học Rust – Bài 19: Con trỏ thông minh (Smart Pointers)

Vượt xa các tham chiếu thông thường với Smart Pointers: Box, Rc...

Tự học Rust – Bài 17: Generics – Viết mã nguồn linh hoạt

Sử dụng Generics trong Rust để tạo ra các hàm và cấu...

Tự học Rust – Bài 16: Xử lý lỗi với Result và Option

Rust không có Exceptions! Khám phá cách xử lý lỗi an toàn...