Smart Pointer
pointer คือแนวคิดทั่วไปสำหรับตัวแปรที่บรรจุ address ใน memory
address นี้อ้างถึง หรือ “ชี้ที่” ข้อมูลอื่น ประเภท pointer ที่ทั่วไปที่สุดใน
Rust คือ reference ซึ่งคุณเรียนในบทที่ 4 reference ถูกระบุด้วย
สัญลักษณ์ & และ borrow ค่าที่พวกมันชี้ พวกมันไม่มีความสามารถพิเศษ
ใด ๆ นอกจากการอ้างถึงข้อมูล และพวกมันไม่มี overhead
Smart pointer ในทางตรงข้าม คือโครงสร้างข้อมูลที่ทำตัวเหมือน pointer แต่ยังมี metadata เพิ่มและความสามารถ แนวคิดของ smart pointer ไม่ unique กับ Rust — smart pointer มีต้นกำเนิดใน C++ และมีอยู่ในภาษาอื่น ด้วย Rust มี smart pointer ที่หลากหลายนิยามใน standard library ที่ ให้ functionality นอกเหนือที่ reference ให้ เพื่อสำรวจแนวคิดทั่วไป เราจะดูตัวอย่างต่าง ๆ ของ smart pointer รวมถึงประเภท smart pointer แบบ reference counting pointer นี้อนุญาตให้คุณให้ข้อมูลมีหลาย owner โดยตามจำนวน owner และเมื่อไม่มี owner เหลือ ทำความสะอาดข้อมูล
ใน Rust ด้วยแนวคิดของ ownership และ borrowing มีความแตกต่างเพิ่ม ระหว่าง reference และ smart pointer — ในขณะที่ reference เพียง borrow ข้อมูล ในหลายกรณี smart pointer own ข้อมูลที่พวกมันชี้
Smart pointer มักถูก implement โดยใช้ struct ต่างจาก struct ปกติ
smart pointer implement trait Deref และ Drop trait Deref
อนุญาตให้ instance ของ struct smart pointer ทำตัวเหมือน reference
เพื่อให้คุณเขียนโค้ดของคุณทำงานกับ reference หรือ smart pointer
trait Drop อนุญาตให้คุณกำหนดโค้ดที่รันเมื่อ instance ของ smart
pointer ออกจาก scope ในบทนี้ เราจะพูดถึงทั้งสอง trait และสาธิตทำไม
พวกมันสำคัญต่อ smart pointer
เนื่องจาก pattern smart pointer เป็น design pattern ทั่วไปที่ใช้ บ่อยใน Rust บทนี้จะไม่ครอบคลุม smart pointer ที่มีอยู่ทุกตัว หลาย library มี smart pointer ของตัวเอง และคุณยังเขียนของตัวเองได้ เรา จะครอบคลุม smart pointer ที่ใช้บ่อยที่สุดใน standard library:
Box<T>สำหรับ allocate ค่าบน heapRc<T>ประเภท reference counting ที่อนุญาตให้มี ownership หลายRef<T>และRefMut<T>ที่เข้าถึงผ่านRefCell<T>ประเภทที่ บังคับใช้กฎ borrowing ที่ runtime แทน compile time
นอกจากนี้ เราจะครอบคลุม pattern interior mutability ที่ประเภท immutable expose API สำหรับ mutate ค่าภายใน เรายังจะพูดถึง reference cycle — ว่าพวกมันรั่ว memory ได้ยังไงและวิธีป้องกัน
มาดำดิ่งกัน!