需要设计一个函数来返回一个BigClass数组。为了防止不必要的复制,我有两个选择。
struct BigClass
{
int manyfields;
};
boost::shared_ptr<vector<BigClass> > Fun1()
{
throw;
}
vector<boost::shared_ptr<BigClass> > Fun2()
{
throw;
}
问题>哪种方法是更好的选择?如果以上都不是一件好事,请提供一个更好的。
谢谢
最佳答案
如果没有返回值优化,则boost::shared_ptr<vector<BigClass> >
的开销要小于vector<boost::shared_ptr<BigClass> >
的开销。第一个复制一个指针,第二个复制 vector 内的N个共享指针。
同样,第二种形式具有较少的缓存/内存一致性。每个BigClass在堆上分别分配,与第一种形式一样,所有BigClass
在一个连续的块中。
关于c++ - 传递LargeData vector 的更好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20336401/