从函数返回一个大的std :: vector

时间:2015-05-27 17:12:45

标签: c++

在C ++ 11中,如果我有一个返回带有大量元素的std::vector<int>的函数,它是否会返回最初创建的向量的深层或浅层副本?

E.g。

std::vector<int> GetVec()
{
    std::vector<int> bar(1000000);
    // Fill in bar with numbers
    return bar;
};

int main()
{
    std::vector<int> foo = GetVec();
    return 0;
}

foobar的完整内容的深层副本,还是仅仅是对bar的引用?

我的理解是C ++函数返回副本,所以在这种情况下,我应该如何避免在此函数中制作昂贵的bar副本?我知道std::vector的元素是在堆上创建的,所以我想知道在函数中复制bar是否会创建深层或浅层副本。

一种方法是将foo作为参数传递:

void GetVec(std::vector<int>& bar)
{
    bar.resize(1000000);
    // Fill in bar with numbers
};

另一种方式是通过引用返回:

std::vector<int>& GetVec()
{
    std::vector<int> bar(1000000);
    // Fill in bar with numbers
    return bar;
};

但最佳做法是什么?

0 个答案:

没有答案