Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Rule of Three (กฎของสาม) ใน C++


Rule of Three (กฎของสาม) เป็นกฎทั่วไป (Rule of Thumb) เมื่อใช้ C++ กฎนี้เป็นแนวทางปฏิบัติที่ดี (Good Practice) ระบุว่า ถ้าคลาสของคุณต้องการใดๆ ระหว่างนี้

  • Copy Constructor
  • Assignment Operator
  • หรือ Destructor

ที่ถูกกำหนดอย่างชัดเจน (Explicitly) แล้ว มันน่าจะต้องการทั้งสามอย่าง

ทำไม? เพราะถ้าคลาสของคุณต้องการอะไรก็ตามจากข้างต้น มันกำลังจัดการทรัพยากรที่จัดสรรแบบไดนามิก (Dynamically Allocated Resources) และน่าจะต้องการอีกสองอย่างเพื่อให้ทำงานสำเร็จ ตัวอย่างเช่น ถ้าคุณต้องการ Assignment Operator คุณจะสร้าง Copy ของออบเจ็กต์ที่กำลังถูก Copy โดย Reference ดังนั้นจึงจัดสรรทรัพยากร คุณจะต้องการ Copy Constructor สำหรับการ Copy และ Destructor สำหรับการปล่อยทรัพยากรเหล่านี้

1. Copy Constructor − Copy Constructor ที่คอมไพเลอร์ให้มา ทำ Member-wise Copy ของทุก Attribute ของ Foo Manager นี่สร้างปัญหาเดียวกับ Assignment Operator

2. Assignment Operator − ถ้าคุณไม่ได้ให้มา คอมไพเลอร์จะสร้าง Default Assignment Operator เอง Default Assignment Operation เป็นฟังก์ชัน Member-wise Copy และทำ Shallow Copy ไม่ใช่ Deep Copy นี่อาจทำให้เกิดปัญหา เช่น Memory Leaks, Wrong Assignment

3. Destructor − เมื่อ Manager นี้หมด Scope ควรปล่อยทรัพยากรทั้งหมดที่มันจัดการอยู่