คราวนี้เรามาพิจารณา smart pointers ที่เราเคยเห็นมาแล้วเช่น Vec<T>
และ String
Vec<T>
คือ smart pointer ที่ครอบครองพื้นที่ไบต์บางส่วนในหน่วยความจำ โดยที่คอมไพเลอร์ของ Rust ไม่รู้เลยว่า ไบต์พวกนั้นคืออะไร
smart pointer จะแปลสิ่งนั้นว่ามันหมายถึงอะไรเพื่อจะได้หยิบมันมาจากหน่วยความจำ เพื่อมาจัดการด้วยการตามดูว่า โครงสร้างข้อมูลนั้นมีจุดเริ่มต้นและสิ้นสุดอยู่ที่ไหน จนพบ โครงสร้างข้อมูลตัวจริงที่ raw pointer ที่ชี้ไปถึง และนำมาจัดหน้าตาให้ดูดีใช้งานง่าย ตามอินเตอร์เฟสในที่สุด (ตัวอย่างเช่น my_vec[3]
)
ในทำนองเดียวกัน String
ก็จะตามดูไบต์ในหน่วยความจำ และใช้กระบวนการทางโปรแกรมบังคับให้สิ่งที่เขียนไว้ในนั้นอยู่ในรูปแบบ utf-8
ที่ถูกต้อง จะได้ dereference ของในหน่วยความจำนั้นผ่าน type &str
โครงสร้างข้อมูลทั้งสองตัวนี้ใช้ unsafe ทำงานเพื่อเข้าไปจัดการกับ raw pointers
รายละเอียดหน่วยความจำ: