我有一个函数可以创建一个非常大的 std::vector。返回此向量时,由于其大小,我不想再次复制它。因此,我想返回对该向量的引用。但是,这样做会给我一个分段错误。为什么是这样?解决办法是什么?
这是我的代码:
std::vector<int>& Foo()
{
std::vector<int> x(100000, 50);
return x;
}
int main()
{
std::vector<int> y = Foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你的向量是一个局部变量。它存在于函数中,并在函数结束时销毁。
因此,您的参考是悬而未决的。它指的是不再存在的对象。
只需按值返回;您的编译器足够聪明,可以优化掉无意义的副本,即使您是 C++11 之前的版本,因此没有移动语义。