move 는 rvalue 캐스팅해주는 함수이다.
객체를 인자로 전달하면 rvalue 로 캐스팅 해준다.
std::vector<std::string> v;
std::string str = "aaa";
v.push_back(std::move(str));
str.clear();
위와 같은 상황에서 str 은 move 에 의해 rvalue 로 캐스팅되어진다.
v 에 push 되는 객체는 str 이 가리키는 메모리를 받고 str 은 nullptr 이 할당된다.
따라서 str 은 요소와 관련한 함수를 호출 할 수 없지만 clear 할 수 있다.
복사와 이동 차이
복사의 경우 복사가 되어질 근본 변수가 유지된다.
이동의 경우 근본 변수가 사용되어지지 않는다는 가정이 있을 경우 사용되며 이동 후 nullptr 된다.
이동은 기존 변수의 소유권이 사라진다는 의미이며 얕은 복사를 통해 더 빠르고 적은 메모리로
객체의 생성 및 대입이 가능하다.
'Cpp' 카테고리의 다른 글
래퍼 함수 (0) | 2024.04.22 |
---|---|
push_back, emplace_back (0) | 2024.04.02 |
클래스의 기본 메소드 6가지 정리 (0) | 2024.04.02 |
템플릿(template) (0) | 2023.06.20 |
콜백 함수 (0) | 2023.06.19 |