【发布时间】:2013-02-21 14:05:45
【问题描述】:
在我当前的项目中,我需要实现相当多的函数/方法,这些函数/方法采用一些参数并生成一组结果(相当大)。所以为了在不复制的情况下返回这个集合,我可以创建一个新集合并返回一个智能指针:
boost::shared_ptr<std::vector<Stuff> > generate();
或者引用一个将被填充的向量:
void generate(std::vector<Stuff> &output);
这两种方法都有好处。第一个清楚地表明向量是函数的输出,在并行化场景中使用它是微不足道的,等等。第二个在循环中调用时可能更有效(因为我们不是每次都分配内存),但是那么参数就是输出就不是那么明显了,需要有人从向量中清理旧数据...
在现实生活中哪个更习惯(即最佳做法是什么)?在 C#/java 中我会争辩说第一个,在 C++ 中是什么情况?
另外,是否可以使用 C++11 按值有效地返回向量?会有什么陷阱?
【问题讨论】:
-
请注意,如果您将可写引用传递给函数,那么很明显该函数将写入它并且它是一个输出。否则,它将是一个 const 引用。
标签: c++ design-patterns