Cha*_*ame 0 c++ pointers return vector
所有
我正在使用2D向量将我的结果从函数返回到main.2D矢量非常大,并且该函数被执行了10K +次,因此我必须使用指针来返回它以加速它.
这是我的代码:
vector<vector<double>>* someFunction()
{
vector<vector<double>> results;
//do something...
return &results;
}
Run Code Online (Sandbox Code Playgroud)
在主要:
int main()
{
// do something
////////// EDIT: vec is a pointer, I missed * at first place
vector<vector<double>>* vec = someFunction(); // vec is empty!
cout<<vec.size(); // size = 0
return;
}
Run Code Online (Sandbox Code Playgroud)
当我在main中检查vec的值和大小时,结果是vec的大小为0.
我可以知道我错了吗?
提前谢谢了.
问候
长
您正在返回指向局部变量的指针.退出函数作用域时,此变量不再存在,使您有一个悬空指针.这是未定义的行为.
只需返回一个值:
vector<vector<double>> someFunction()
{
vector<vector<double>> results;
//do something...
return results;
}
Run Code Online (Sandbox Code Playgroud)
如果您担心按价值返回涉及昂贵的副本,请记住,极有可能通过返回值优化(RVO),特别是返回值优化(NRVO)来省略这些副本.即使这没有发生(它是可选的,所以实现可以决定不这样做),在C++ 11中,移动语义会起作用.移动一个std::vector<double>非常便宜.