【发布时间】:2014-11-12 17:02:03
【问题描述】:
传递和转移向量及其数据所有权的最佳方式是什么?
在理想的世界中,它会像这样工作:
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!)
【问题讨论】:
-
为什么不直接按值返回呢?任何体面的优化编译器都会将副本优化为移动。
-
任何符合 C++11 的编译器最多只能做一个动作。任何体面的优化编译器都会完全忽略复制/移动。
-
@TheParamagneticCroissant 实际上,RVO 将简单地构造将返回的向量,因此任何现代编译器都不会移动。
-
@cdhowie 是的,还有一个按值返回的原因。