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));