как вернуть уникальное право собственности на c ++ - PullRequest
0 голосов
/ 24 апреля 2018

Я не могу переместить std::vector<std::unique_ptr<..>> из функции: MSVC жалуется (C2280) на попытку ссылки на удаленную функцию.

Как это будет работать?

#include <vector>
#include <iostream>
#include <memory>

using namespace std;

class foo {
public:
   int i;
};

vector<unique_ptr<foo>> test() {
   vector<unique_ptr<foo>> ret{};

   auto f = make_unique<foo>();
   f->i = 1;
   ret.push_back(move(f));

   return move(ret);
}

int main(int argc, char** argv) {
   auto t = test();
   for (auto j : t) {
// fails here: --^
      cout << j->i << endl;
   }

   getchar();
}

Полная ошибкасообщение гласит:

'std :: unique_ptr> :: unique_ptr (const std :: unique_ptr <_Ty, std :: default_delete <_Ty >> &)': попытка сослаться на удаленную функцию

1 Ответ

0 голосов
/ 24 апреля 2018

Это не функция, это цикл ...

for (auto j : t)

... который пытается скопировать-инициализировать j для каждого элемента t по очереди. Напомним, что простой auto означает семантику значения. Вместо этого используйте ссылку:

for (auto const& j : t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...