Copy Elision (Loại bỏ sao chép) còn được gọi là Copy Omission (Pom sai sao chép). Đây là một kỹ thuật tối ưu hóa của trình biên dịch. Nó tránh việc sao chép đối tượng không cần thiết. Gần như mọi trình biên dịch hiện đại đều sử dụng kỹ thuật Copy Elision này.
Hãy xem nó hoạt động như thế nào thông qua ví dụ mã sau.
Mã ví dụ
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(const char* str = "\0") { // constructor mặc định
cout << "Constructor được gọi" << endl;
}
MyClass(const MyClass &my_cls) { // copy constructor
cout << "Copy constructor được gọi" << endl;
}
};
int main() {
MyClass ob = "copy class object";
}
Kết quả đầu ra
Constructor được gọi
Bây giờ hãy thảo luận tại sao copy constructor không được gọi?
Khi một đối tượng đang được xây dựng, một đối tượng tạm thời được tạo ra và nó được sao chép vào đối tượng thực tế. Vì vậy, nội bộ nó sẽ trông giống như sau.
MyClass ob = "copy class object";
Sẽ hoạt động như.
MyClass ob = MyClass("copy class object");
Các trình biên dịch C++ tránh loại chi phí này.