객체 a 를 b,c 로 복사할 때, a 가 필요없는 경우가 보장되면 복사과정에 대한 비용을 줄일 수 있다.

string a = "std::move";
cout << "a = " << a << endl;	// "std::move"

string b = a;				// copy가 일어남
cout << "b = " << b << endl;	// "std::move"
cout << "a = " << a << endl;	// "std::move"

string c = move(a);			// move가 일어나고 a는 빈 문자열이 됨
cout << "c = " << c << endl;	// "std::move"
cout << "a = " << a << endl;	// ""

std::move 를 사용하면 a 는 c 로 이동이 되어 a 는 빈 문자열이 되고 c 는 문자열("std::move")을 가지는데, 

이 경우 새로 메모리를 할당하지 않아도 되고 이미 메모리에 할당된 문자열의 소유권만 c 에게 넘겨주기 때문에 copy 보다 빠르고 효율적이다.

 

std::move 된 객체를 함수에 전달하면 우측값 레퍼런스를 인자로 받는 함수가 오버로딩 되어서 선택된다.

*우측값 레퍼런스 자체는 R value 가 아니라 L value 이기 때문에, 이동 생성자나 이동 대입 연산자 내부에서

  std::move를 호출하는 경우가 많음.

 

[참고] https://www.youtube.com/watch?v=6buEm6R980o&t=332s 

 

'::public > C++' 카테고리의 다른 글

*개념을 항상 생각하고 정리하자!  (0) 2023.06.22
(c++11) lambda  (0) 2023.02.08
(C++11) alignas  (0) 2023.01.18
byte padding(바이트 패딩)  (0) 2023.01.18
(C++11) chrono  (0) 2023.01.04

+ Recent posts