Table of contents
Open Table of contents
1. Box<T> - Cấp phát trên Heap
Box<T> 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<T> - Đế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<T> - 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<T>>
Đâ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!