在我当前的项目中,我需要实现相当多的函数/方法,这些函数/方法采用一些参数并生成一组结果(相当大)。因此,为了在不复制的情况下返回这个集合,我可以创建一个新集合并返回一个智能指针:
boost::shared_ptr<std::vector<Stuff> > generate();
或引用将被填充的向量:
void generate(std::vector<Stuff> &output);
这两种方法都有好处。第一个清楚地表明向量是函数的输出,在并行化场景中使用它是微不足道的,等等。第二个在循环中调用时可能更有效(因为我们不是每次都分配内存),但是那么参数是输出就不是那么明显了,需要有人从向量中清除旧数据...
在现实生活中哪个更习惯(即最佳做法是什么)?在 C#/java 中,我认为第一个,在 C++ 中是什么情况?
此外,是否可以使用 C++11 按值有效地返回向量?会有什么陷阱?