Copy Elision เรียกอีกอย่างว่า Copy Omission นี่เป็นหนึ่งในเทคนิคการเพิ่มประสิทธิภาพคอมไพเลอร์ มันหลีกเลี่ยงการคัดลอกวัตถุโดยไม่จำเป็น คอมไพเลอร์ปัจจุบันเกือบทั้งหมดใช้เทคนิค CopyElision นี้
ให้เราดูว่ามันทำงานอย่างไรด้วยความช่วยเหลือของโค้ดตัวอย่างเดียว
โค้ดตัวอย่าง
#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;
}
};
main() {
MyClass ob = "copy class object";
} ผลลัพธ์
Constructor called
ตอนนี้ให้เราคุยกันว่าทำไมตัวสร้างการคัดลอกจึงไม่ถูกเรียก
ดังนั้นเมื่อมีการสร้างอ็อบเจ็กต์ ออบเจ็กต์ชั่วคราวหนึ่งรายการจะถูกสร้างขึ้นและคัดลอกไปยังอ็อบเจ็กต์จริง ดังนั้นเราสามารถพูดได้ว่าภายในมันจะเป็นแบบนี้
MyClass ob = "copy class object";
จะทำงานเป็น.
MyClass ob = MyClass("copy class object"); คอมไพเลอร์ C++ หลีกเลี่ยงโอเวอร์เฮดประเภทนี้