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