Con trỏ thông minh có xu hướng sử dụng code không an toàn khá thường xuyên. Như đã đề cập trước đó, chúng là công cụ phổ biến để tương tác với các mức bộ nhớ thấp nhất trong Rust.
Code không an toàn là gì? Code không an toàn hoạt động giống như Rust bình thường ngoại trừ một vài khả năng mà trình biên dịch Rust không thể đảm bảo.
Khả năng chính của code không an toàn là dereferencing đến một con trỏ thô. Điều đó có nghĩa là đưa một con trỏ thô đến một vị trí trong bộ nhớ và tuyên bố "một cấu trúc dữ liệu tồn tại ở đây!" và biến nó thành một biểu diễn dữ liệu mà bạn có thể sử dụng (tức là *const u8
thành u8
).
Rust không có cách nào để theo dõi ý nghĩa của từng byte được ghi vào bộ nhớ. Bởi vì Rust không thể đảm bảo về những gì tồn tại ở một số tùy ý được sử dụng như một con trỏ thô, nó đặt tham chiếu vào một unsafe { ... }
block.
Con trỏ thông minh dereference con trỏ thô một cách rộng rãi, nhưng chúng đã được chứng minh rõ ràng trong những gì chúng làm.