Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

복사 생략 및 반환 값 최적화란 무엇입니까?


복사 제거는 특정 상황에서 추가(잠재적으로 비용이 많이 드는) 사본을 방지하기 위해 대부분의 컴파일러에서 구현하는 최적화입니다. 따라서 사용되지 않거나 부작용이 없는 개체를 생성하는 코드가 있는 경우

struct MyStruct {
   MyStruct() {}
   MyStruct(const MyStruct&) {
      std::cout << "Copied.\n";
   }
};
MyStruct f() {
    return MyStruct();
}
int main() {
   std::cout << "Main\n";
   MyStruct obj = f();
}

출력

컴파일러 및 설정에 따라 다음과 같은 출력을 얻을 수 있습니다. -

Main

Main
Copied
Copied

Main
Copied

즉, 생성할 수 있는 개체가 예상보다 적으므로 특정 수의 생성자와 소멸자를 호출할 수 없습니다. 복사/이동 생성자 또는 소멸자 내부에 중요한 논리가 있어서는 안 됩니다. 호출되는 것에 의존할 수 없기 때문입니다.