Hãy xem xét một số con trỏ thông minh mà chúng ta đã thấy như Vec<T>
và String
.
Vec<T>
là một con trỏ thông minh chỉ sở hữu một số vùng nhớ byte. Trình biên dịch Rust không biết những gì tồn tại trong những byte này. Con trỏ thông minh giải thích ý nghĩa của việc lấy các mục từ vùng bộ nhớ mà nó quản lý, theo dõi vị trí các cấu trúc dữ liệu trong các byte đó bắt đầu và kết thúc, sau đó cuối cùng tham chiếu một con trỏ thô vào các cấu trúc dữ liệu thành một giao diện đẹp để chúng ta sử dụng (ví dụ: my_vec[3]
).
Tương tự, String
theo dõi vùng nhớ byte và lập trình hạn chế nội dung được ghi vào vùng nhớ đó để luôn có giá trị utf-8
và giúp dereference vùng nhớ đó thành kiểu &str
.
Cả hai cấu trúc dữ liệu này đều sử dụng dereferencing không an toàn của các con trỏ thô để thực hiện công việc của chúng.
Chi tiết bộ nhớ: