Copy-and-Swap Idiom ใน C++
การกำหนดค่า (assignment) ประกอบด้วย 2 ขั้นตอน: ทำลายสถานะเก่าของออบเจ็กต์ และสร้างสถานะใหม่ Destructor ใช้ขั้นตอนแรก Copy constructor ใช้ขั้นตอนที่สอง การ overload assignment operator อาจทำให้ยาก Copy-and-swap idiom เป็นวิธีแก้
Idiom นี้ใช้ copy-constructor สร้าง local copy ของข้อมูล แล้ว swap ข้อมูลเก่ากับข้อมูลใหม่ด้วย swap function Temporary copy จะถูกทำลายด้วย destructor ทำให้เหลือแค่ copy ของข้อมูลใหม่
Copy-and-swap idiom ต้องการ 3 สิ่ง:
- copy-constructor
- destructor
- swap function (non-throwing)
หมายเหตุ: ห้ามใช้ std::swap เพราะมันใช้ copy constructor และ assignment operator ภายใน ซึ่งจะวนรูป