避免矢量复制构造函数

mk3*_*k33 3 c++ stl

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

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

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

// Do something with the result;
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

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

vector<int> result = std::move(myClass.GenerateVectorOfInt(/* params */));
Run Code Online (Sandbox Code Playgroud)

Bau*_*gen 6

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

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


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