Move Semantics

이동 소유권 이전

rvalue 참조는 곧 소멸될 값의 내부 자원을 새 객체로 이전할 수 있는 통로입니다.

값 범주이름이 있는 객체는 lvalue이고, 임시 객체와 std::move(x) 결과는 이동 후보가 됩니다.
이동 후 상태원본은 유효하지만 내용은 지정되지 않을 수 있으므로 파괴나 재대입 위주로 다룹니다.
copy

새 저장소에 내용을 복제합니다

대용량 버퍼는 할당과 원소 복사가 반복되어 비용이 큽니다.

move

포인터와 크기 같은 핸들을 옮깁니다

원본 포인터를 비워 두면 두 객체가 같은 자원을 해제하지 않습니다.

forward

받은 값 범주를 보존합니다

템플릿 전달 함수는 std::forward로 lvalue와 rvalue를 구분해 넘깁니다.

시그니처이동 생성자는 T(T&& other), 이동 대입은 T& operator=(T&& other) 형태입니다.
noexcept컨테이너 재배치에서 이동이 선택되려면 이동 생성자에 noexcept를 붙이는 것이 중요합니다.
std::move실제로 옮기지 않고 lvalue를 rvalue 참조로 캐스팅해 이동 연산 후보로 만듭니다.

이동 소유권 이동 시맨틱은 성능 문법이기 전에 소유권 설계입니다. 옮긴 뒤 원본이 안전하게 파괴될 수 있어야 합니다.