복사 생략은 복사 생략이라고도 합니다. 이것은 컴파일러 최적화 기술 중 하나입니다. 불필요한 객체 복사를 방지합니다. 현재 거의 모든 컴파일러가 이 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++ 컴파일러는 이러한 종류의 오버헤드를 방지합니다.