Функция move
Функция move из заголовочного файла utility преобразует переданный объект в rvalue-ссылку. Это позволяет компилятору выбрать конструктор перемещения или оператор присваивания перемещением вместо копирования. В первый параметр мы передаем объект, который нужно преобразовать, а второй параметр (шаблонный тип) обычно выводится автоматически. Сама функция не выполняет никаких действий с памятью - она лишь меняет категорию значения выражения.
Синтаксис
std::move(obj)
Пример
Давайте создадим строку str1 и переместим её содержимое в строку str2 с помощью функции move:
#include <iostream>
#include <string>
#include <utility>
using namespace std;
int main()
{
string str1 = "abcde";
string str2 = move(str1);
cout << "str2: " << str2 << endl;
cout << "str1: " << str1 << endl;
return 0;
}
Результат выполнения кода:
"str2: abcde"
"str1: "
Пример
Давайте создадим вектор чисел и переместим его в другой вектор, чтобы избежать копирования:
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int main()
{
vector<int> vec1 = {1, 2, 3, 4, 5};
vector<int> vec2 = move(vec1);
cout << "vec2 size: " << vec2.size() << endl;
cout << "vec1 size: " << vec1.size() << endl;
return 0;
}
Результат выполнения кода:
"vec2 size: 5"
"vec1 size: 0"