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

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

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

1. `Box` – Cấp phát trên Heap

`Box` cho phép bạn lưu trữ dữ liệu trên Heap thay vì Stack. Khi ra khỏi phạm vi, Box sẽ tự động giải phóng vùng nhớ trên Heap.

let b = Box::new(5);
println!("b = {}", b);

2. `Rc` – Đếm lượt tham chiếu (Reference Counting)

Khi bạn muốn một giá trị có nhiều chủ sở hữu cùng lúc (phá vỡ quy tắc 1 chủ sở hữu duy nhất), hãy dùng `Rc`. Nó đếm số lượng tham chiếu đang chỉ đến giá trị, và chỉ xóa giá trị khi số lượt đếm bằng 0.

Lưu ý: Rc chỉ dùng được trong môi trường đơn luồng.

3. `RefCell` – Khởi tạo Mutable tại Runtime

`RefCell` cho phép bạn thay đổi dữ liệu ngay cả khi bạn chỉ có một tham chiếu bất biến (`&T`). Đây gọi là mô hình Interior Mutability. Rust sẽ kiểm tra các quy tắc mượn (borrowing rules) lúc chương trình đang chạy (Runtime) thay vì lúc biên dịch (Compile-time).

4. Kết hợp `Rc<RefCell>`

Đây là bộ đôi huyền thoại để tạo ra các cấu trúc dữ liệu linh hoạt, nơi nhiều thành phần có thể cùng sở hữu và cùng thay đổi nội dung của một vùng nhớ chung.

Lời kết Bài 19

Smart Pointers mở ra cánh cửa cho những cấu trúc dữ liệu linh hoạt và phức tạp. Ở bài viết cuối cùng của Series này, chúng ta sẽ khám phá sức mạnh của Concurrency – cách Rust xử lý đa luồng một cách an toàn tuyệt đối.

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 18: Lifetimes – Đảm bảo tham chiếu hợp lệ

Lifetimes là gì? Tại sao Rust cần chúng? Tìm hiểu cách trình...

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...