std::move

std::move 이동 가능 표시

`std::move(vec1)`은 `vec1`을 rvalue처럼 다루게 만드는 캐스팅입니다. 실제 자원 이전은 이동 생성자나 이동 대입 연산자가 수행합니다.

1

소유 객체

MyVector vec1(10);

힙 메모리와 크기 정보를 정상적으로 소유합니다.

2

캐스팅

std::move(vec1)

컴파일러에게 이 객체의 자원을 가져가도 된다고 표현합니다.

3

이동 생성

MyVector vec3 = ...;

포인터와 크기 정보가 새 객체로 이전됩니다.

4

원본 정리

vec1.data = nullptr;

원본은 유효하지만 내용은 지정되지 않은 상태가 됩니다.

before

`vec1`이 자원을 소유하고 소멸자가 해제 책임을 가집니다.

after

`vec3`이 자원을 소유하고 `vec1`은 재초기화 후 사용하는 편이 안전합니다.

move 이후 상태 `std::move` 이후 원본 객체에 기대할 수 있는 것은 소멸 가능성과 대입 가능성 정도입니다.