C ++ unique_ptr向量

时间:2017-02-23 15:12:32

标签: c++ unique-ptr

我有以下代码行

start

我遇到的问题是我不能只返回系统,因为它在移动后会为NULL。 我带来的解决方案如下,我不知道它是否是最好的。

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

如果有更好的方法吗?

2 个答案:

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