需要设计一个函数来返回一个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/

10-11 15:23