我有以下代码行
start
我遇到的问题是我不能只返回系统,因为它在移动后会为NULL。 我带来的解决方案如下,我不知道它是否是最好的。
SystemFactory::system_ptr system = _Factory->createSystem(systemType);
_Systems.push_back(std::move(system));
如果有更好的方法吗?
答案 0 :(得分:8)
您可以使用back()
:
return _Systems.back().get();
...或事先保存:
SystemFactory::system_ptr system = _Factory->createSystem(systemType);
auto *p = system.get();
_Systems.push_back(std::move(system));
return p;
答案 1 :(得分:4)
在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));