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

Copy Elision ใน C++

บทนำ

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

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

#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 แบบนี้