객체 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 |