在c ++中通过引用返回类的向量

时间:2014-12-28 01:11:55

标签: c++ class vector reference return

我有一个返回类向量的函数:

vector<movement> returnMoves(int startx, int starty, int bb[][8], int side){

vector<movement> moves;
movement adding;
moves.push_back(adding); moves.push_back(adding); //example

return moves;
}

我从主要方面以这种方式调用函数:

vector<movement> t1;
t1 = returnMoves(startx, starty, bb, 1);

它有效,但是这个过程已经进行了很多次,而且速度很慢,所以我想让它更快,所以我考虑通过引用或指针返回: 这就是我试过的:

vector<movement> & returnMoves(int startx, int starty, int bb[][8], int side){
vector<movement> temp1;
vector<movement>& moves = temp1;
moves.push_back(adding); moves.push_back(adding);
return moves;
}

并以同样的方式调用它:

 t1 = returnMoves(startx, starty, bb, 1);

它给我一个分段错误,我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在返回对局部变量的引用。 temp1退出后变量returnMoves超出范围,导致未定义的行为。如果你想避免复制,你可以简单地传入你想要填充的对象:

void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}

现在,您可以将其用作:

vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);