Copy Elision = การเพิ่มประสิทธิภาพของคอมไพเลอร์ที่ข้ามการ copy/move object ที่ไม่จำเป็น (ไม่มี side effects)
ตัวอย่าง
struct MyStruct {
MyStruct() {}
MyStruct(const MyStruct&) { std::cout << "Copied\n"; }
};
MyStruct f() { return MyStruct(); }
int main() {
std::cout << "Main\n";
MyStruct obj = f();
}
ผลลัพธ์ที่เป็นไปได้ (ขึ้นกับ compiler/optimization)
Main Main Copied Copied Main Copied
RVO (Return Value Optimization) = กรณีพิเศษของ copy elision ตอน return object จากฟังก์ชัน คอมไพเลอร์สร้าง object ตรงใน memory ของ caller
ข้อสังเกต: จำนวน constructor/destructor ที่เรียกไม่คงที่ ไม่ควรวาง logic สำคัญใน copy/move constructors หรือ destructors