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

Copy Elision และ Return Value Optimization (RVO) ใน C++


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