传递矢量引用是否会转移其数据的所有权?

时间:2014-11-12 17:02:03

标签: c++ rvo

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

在一个理想的世界中,它会起到这样的作用:

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!)

1 个答案:

答案 0 :(得分:5)

  

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

按值返回向量。

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

如果您过去陷入困境,请确保您符合返回值 copy elision 的条件。你的功能只有一个返回点。虽然不是必需的,但任何体面的编译器都会执行该优化。

  

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

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