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:
- Destructor
- Copy Assignment Operator
- Copy Constructor
- Move Constructor - bind rvalue reference, "ขโมย" resource
- Move Assignment Operator - transfer ownership
Move operations ทำให้ไม่ต้อง copy แล้ว destroy temporary objects ช่วยประสิทธิภาพมาก
อ่านเพิ่ม: Rule of the Big Five