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

คัดลอกเอลิชันใน C++


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

ผลลัพธ์

Constructor called

ตอนนี้ให้เราคุยกันว่าทำไมตัวสร้างการคัดลอกจึงไม่ถูกเรียก

ดังนั้นเมื่อมีการสร้างอ็อบเจ็กต์ ออบเจ็กต์ชั่วคราวหนึ่งรายการจะถูกสร้างขึ้นและคัดลอกไปยังอ็อบเจ็กต์จริง ดังนั้นเราสามารถพูดได้ว่าภายในจะมีลักษณะดังนี้:

MyClass ob = "copy class object";

จะทำงานเป็น:

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

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