C++ unique_ptr вектор

У меня есть следующая строка кода

SystemFactory::system_ptr system = _Factory->createSystem(systemType);
_Systems.push_back(std::move(system));

Проблема, которую я имею, состоит в том, что я не могу просто вернуть систему, так как она обнулит ее после ее перемещения. Решение, с которым я пришел, заключается в следующем, и я не знаю, является ли оно лучшим.

return (_Systems.end() - 1)->get();

Есть ли лучший способ сделать это?

2 ответа

Вы можете использовать back():

return _Systems.back().get();

... или сохраните это заранее:

SystemFactory::system_ptr system = _Factory->createSystem(systemType);
auto *p = system.get();
_Systems.push_back(std::move(system));
return p;

В C++17 std::vector::emplace_back вернет ссылку на размещенный объект. Поэтому вы сможете написать:

SystemFactory::system_ptr system = _Factory->createSystem(systemType);
return _Systems.emplace_back(std::move(system));

Или даже короче

return _Systems.emplace_back(_Factory->createSystem(systemType)); 
Другие вопросы по тегам