在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;
}
foo
是bar
的完整内容的深层副本,还是仅仅是对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;
};
但最佳做法是什么?