Функция-член возвращает ссылку на значение переменной-члена

#include <vector>
using namespace std;

struct TempData {
vector<int> data;
TempData() {
for(int i = 0; i < 100; i++) data.push_back(i);
}
// vector<int> GetData() { // function 1
//  return move(data);
// }
vector<int>&& GetData() { // function 2
return move(data);
}
};

int main() {
vector<int> v;
{
TempData td;
v = td.GetData();
}
}

В чем разница между function 1 а также function 2?

Будет function 1 построить темп vector с move(data) а затем назначить временную vector в v?

Нет больше деталей, чтобы добавить …

1

Решение

В вашем маленьком тестовом случае, скорее всего, нет никакой разницы. Дополнительный временный объект почти наверняка будет удален. И v в main будет содержать содержимое переменной-члена.

Но в общем случае:

Версия 1 будет определенно покинуть член data в каком-то неопределенном «пустом» состоянии. Даже когда возвращаемое значение функции отбрасывается.

Версия 2 может оставьте элемент в каком-либо неопределенном пустом состоянии, иначе это может быть не так. Например, если функция вызывается и ее возвращаемое значение отбрасывается, элемент не изменится. Вот почему можно сказать, что std::move само по себе ничего не двигает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]