避免矢量复制构造函数

时间:2015-11-02 04:53:24

标签: c++ stl

我有一堆返回vector<int>的方法。它们不返回引用或指向vector<int>的指针,因为返回的值不是类'state的一部分,它只是根据方法参数动态生成。

当我调用这样的方法时,我想避免调用vector<int>复制构造函数。

vector<int> result = myClass.GenerateVectorOfInt(/* params */); 

// Do something with the result;

最好的方法是什么?

这是否可以接受?或者还有其他更好或更优雅的解决方案。

vector<int> result = std::move(myClass.GenerateVectorOfInt(/* params */));

1 个答案:

答案 0 :(得分:6)

你不需要做任何特别的事情,允许编译器在可行的情况下忽略副本。这称为“返回值优化”(RVO)。

即使没有发生RVO,C ++ 11也会强制将vector移动到位,这很便宜,与其大小无关。 (通常这是1个指针和2个整数赋值。)因此向量将永远被复制,移动是最坏的情况。

如果由于任何原因RVO没有发生,那么移动对于您的用例来说太昂贵了(极不可能),如果不更改功能签名,您无能为力;在呼叫点添加std::move或类似内容将无济于事。