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

Copy Elision และ Return Value Optimization ใน C++ คืออะไร


Copy Elision หรือ Copy Omission เป็นหนึ่งในเทคนิคการเพิ่มประสิทธิภาพของคอมไพเลอร์ (compiler optimization technique) เทคนิคนี้หลีกเลี่ยงการคัดลอกออบเจกต์ที่ไม่จำเป็น คอมไพเลอร์เกือบทุกตัวในปัจจุบันใช้เทคนิค Copy Elision นี้

ลองดูวิธีการทำงานผ่านโค้ดตัวอย่างต่อไปนี้

โค้ดตัวอย่าง

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass(const char* str = "\0") { // default constructor
        cout << "Constructor called" << endl;
    }
    MyClass(const MyClass &my_cls) { // copy constructor
        cout << "Copy constructor called" << endl;
    }
};

int main() {
    MyClass ob = "copy class object";
}

ผลลัพธ์

Constructor called

ทดลองคิดว่าทำไม copy constructor จึงไม่ถูกเรียก?

เมื่อออบเจกต์กำลังถูกสร้างขึ้น จะมีออบเจกต์ชั่วคราว (temporary object) สร้างขึ้นหนึ่งตัว และคัดลอกไปยังออบเจกต์จริง ดังนั้นภายในจะดูเหมือนกับนี้

MyClass ob = "copy class object";

จะทำงานเหมือนกับ

MyClass ob = MyClass("copy class object");

คอมไพเลอร์ C++ หลีกเลี่ยง overhead ประเภทนี้