갱스
rvalue reference 본문
우선 rvalue와 lvalue를 구별할 수 있어야 한다. 아래 포스트에 잘 설명되어있다.
move 개념이 등장하기 전까진 move와 copy 모두 copy방식으로 구현해왔었다. 하지만 move와 copy를 구별해서 코드를 짜면 불필요한 메모리할당과 복사를 피할 수 있다. 굳이 copy를 하지 않고 move만으로 기능구현이 가능하다면 move를 하도록 하자.
특히 라이브러리나 엔진같은 기반코드를 작성하는 프로그래머라면, 본인이 만들 클래스가 이동될 것인 지 복사될 것인 지를 잘 디자인해야 한다. 만약 이동만으로 충분하다면 복사생성자와 복사대입연산자를 지워버리고(= delete) 이동생성자와 이동대입연산자만 제공하는 것을 고려해본다.
아래 코드는 move semantic의 등장배경을 이해해볼 수 있는 예제이다. MoveFrom()과 CopyFrom()을 잘 들여다 보자.
Comments