Copy Elision (còn gọi Copy Omission) là kỹ thuật tối ưu hóa trình biên dịch tránh sao chép đối tượng không cần thiết. Hầu hết trình biên dịch hiện đại đều áp dụng.
Ví dụ
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(const char* str = "\0") { // constructor mặc định
cout << "Constructor called" << endl;
}
MyClass(const MyClass &my_cls) { // copy constructor
cout << "Copy constructor called" << endl;
}
};
int main() {
MyClass ob = "copy class object";
}
Kết quả
Constructor called
Tại sao copy constructor không được gọi? Khi khởi tạo đối tượng, một đối tượng tạm thời được tạo và sao chép. Nội bộ: MyClass ob = MyClass("copy class object");. Trình biên dịch C++ loại bỏ chi phí này.