0

传递和转移向量及其数据所有权的最佳方式是什么?

在理想的世界中,它会像这样工作:

std::vector<int>& SpitAVector(int input)
{
    std::vector<int> result;
    result.push_back(input);
    return result;
}

int main()
{
    std::vector<int> myvec;
    myvec = SpitAVector(60);

    std::cout << (int)myvec[0] << std::endl;  //Outputs 60      
}

这不起作用,因为我正在返回对局部变量的引用。

是否可以使用boost::unique_ptrboost::shared_ptr处理这个向量输出?(不能使用 C++11 的 unique_ptr!)

4

1 回答 1

5

传递和转移向量及其数据所有权的最佳方式是什么?

按值返回向量。

在 C++11 或更高版本中,返回值将被移动(如果需要),因此肯定不会有批量数据副本。

如果您停留在过去,请确保您满足返回值复制省略的标准。你的函数,只有一个返回点,可以。尽管不是必需的,但任何体面的编译器都会执行该优化。

是否可以使用 boost::unique_ptr 或 boost::shared_ptr 来处理这个向量输出?

是的,但这会不必要地复杂。只需按值返回。

于 2014-11-12T17:04:21.520 回答