Move Semantics(이동 의미론)
CodingGom이 C++11을 처음 접했을때 알게된 내용이다. 기존에는 값을 복사하는 방식으로 인자의 전달, 값의 반환등의 작업이 진행 되었다. Move Semantics은 이러한 작업이 값을 복사하여 진행 되는것이 아닌 이동을 통해 진행된다는 개념이다.
즉, 어차피 같은 값인걸 복사하는 비용과 임시 변수를 생략하고 그대로 쓸 수 없을까? 를 실현하기 위하여 도입된게 아닐까라고 개인적으로는 생각한다.
일반적으로 값이 복사되어 작업을 진행할경우 다음과 같은 과정으로 진행된다. (복사 의미론)
- 멤버 변수를 위한 새로운 리소스 할당 => 새로운 공간 할당
- 인자로 부터 this 포인터로 복사 => 새로운 공간에 기존에 있던 값들 복사
- 복사가 완료되면 기존 리소스 해제 => 복사가 완료된 기존 공간 해제
- 해제된 리소스를 통해 새로운 리소스를 할당해 반환 => 새로운 공간의 이름을 기존 이름으로 변화시킴
이동 의미론은 위의 과정중, 복사 생성자, 복사 대입연산자에 의해 발생하는 불필요한 리소스 할당과 복사, 해제 과정을 생략 하자는 것이다.
이러한 이동 의미론과 관련이 깊은 R-Value 와 L-Value에 관한 포스팅은 추후 올릴 예정이다.