[C/C++]이동의미론(Move Semantics)

2022. 4. 8. 00:05Programming language/C, C++

    목차

이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.

서론

C++11을 처음 접했을 때 알게 된 내용이다. 기존에는 값을 복사하는 방식으로 인자의 전달, 값의 반환 등의 작업이 진행되었다. Move Semantics은 이러한 작업이 값을 복사하여 진행되는 것이 아닌 이동을 통해 진행된다는 개념입니다.

 

즉, 어차피 같은 값인걸 복사하는 비용과 임시 변수를 생략하고 그대로 쓸 수 없을까? 를 실현하기 위하여 도입된 게 아닐까라고 개인적인 생각입니다.


이동 의미론과 복사 의미론

일반적으로 값이 복사되어 작업을 진행할 경우 다음과 같은 과정으로 진행됩니다. (복사 의미론)

  • 멤버 변수를 위한 새로운 리소스 할당 => 새로운 공간 할당
  • 인자로 부터 this 포인터로 복사 => 새로운 공간에 기존에 있던 값들 복사
  • 복사가 완료되면 기존 리소스 해제 => 복사가 완료된 기존 공간 해제
  • 해제된 리소스를 통해 새로운 리소스를 할당해 반환 => 새로운 공간의 이름을 기존 이름으로 변화시킴

이동 의미론은 위의 과정 중,복사 생성자, 복사 대입 연산자에 의해 발생하는 불필요한 리소스 할당과 복사, 해제 과정을 생략 하자는 것입니다.

이러한 이동 의미론과 관련이 깊은 R-Value와 L-Value에 관한 포스팅은 추후 올릴 예정입니다.

 

반응형
LIST