RVO 가 일어나게 되면, 앞서 배웠던 소유권의 이전(move)이 발생할 필요 없이 0 copy 를 달성해 낼 수 있다. 함수의 return 값을 value로 하게 되면(return by value) RVO가 개입되며 가장 효율적인 할당을 해낼 수 있다는 것이다. 다음의 코드를 보면, 프로세스는 이렇게 진행될 것이라 생각하기 쉽다. 심지어 이럴 때 std:move() 를 사용해서 copy를 없애주고자 하는 사람도 있다. 하지만, 실제로는 RVO가 개입된다. : 실제로 컴파일러는 Return Value Address가 a를 가리키고 있다는 것을 알고 있다. 따라서 결국 함수공간 안에 힙 공간에 문자열을 만들고 a가 직접 이 공간을 가리키도록 만들어 놓는다. 함수가 끝나고 해제되며 우측 그림처럼 된다. RV..
std::move
1. L-value, R-value란? 다시 한 번 부를 수 있으면 Lvalue 한 번만 쓰이고 다시 불릴 수 없으면 Rvalue std::string S = "abc"; 같은 경우에도 S값은 나중에 다시 부를 수 있기 때문에 Lvalue, "abc"는 이 명령어에서만 쓰이고 다시는 쓰이지 않기 때문에 Rvalue. 더 자세한 설명은 다른 분들이 잘 정리해 주셨으니 참고할 것. https://effort4137.tistory.com/entry/Lvalue-Rvalue Lvalue Rvalue C++ Lvalue와 Rvalue에 대한 오해 Lvalue와 Rvalue는 보통 Left-value(왼쪽값)과 Right-value(오른쪽값)로 풀어서 씁니다. 이 때문에 대입 연산자(=)를 기준으로 왼쪽에 위치하는..