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

Rule of Three vs Rule of Five ใน C++


Rule of Three (C++98/03)

ถ้าคลาสต้องการ implement ตัวใดตัวหนึ่งใน 3 นี้ ควร implement ทั้ง 3:

  • Copy Constructor
  • Copy Assignment Operator
  • Destructor

เหตุผล: ถ้าจำเป็นต้องมีหนึ่งในนี้ แสดงว่าคลาสจัดการ dynamic resources ต้องการทั้งการ copy (ctor/assign) และการ cleanup (dtor)

Rule of Five (C++11+)

ขยาย Rule of Three เพิ่ม move semantics:

  1. Destructor
  2. Copy Assignment Operator
  3. Copy Constructor
  4. Move Constructor - bind rvalue reference, "ขโมย" resource
  5. Move Assignment Operator - transfer ownership

Move operations ทำให้ไม่ต้อง copy แล้ว destroy temporary objects ช่วยประสิทธิภาพมาก

อ่านเพิ่ม: Rule of the Big Five