传递和转移媒介所有权及其数据的最佳方式是什么?
在一个理想的世界中,它会起到这样的作用:
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_ptr
或boost::shared_ptr
来处理此向量输出? (不能使用C ++ 11&unique_ptr!)
答案 0 :(得分:5)
传递和转移媒介所有权及其数据的最佳方式是什么?
按值返回向量。
在C ++ 11或更高版本中,将移动返回值(如有必要),因此肯定不会成为批量数据副本。
如果您过去陷入困境,请确保您符合返回值 copy elision 的条件。你的功能只有一个返回点。虽然不是必需的,但任何体面的编译器都会执行该优化。
是否可以使用boost :: unique_ptr或boost :: shared_ptr来处理此向量输出?
是的,但这会不必要地复杂化。只需按价值返回。