C ++:使用引用变量创建一个新对象

时间:2014-04-17 13:40:02

标签: c++ vector

在一个函数中,我得到一个参数:vector:

void myFunc (vector< int>& myRef) {...}

现在在这个函数中我需要备份(因为myRef将成为别的东西)对该特定向量的引用:

vector< int>& myBackup = myRef

现在我想让myRef成为对该向量的新副本的引用。我该怎么做?

我可以说

vector< int> myRef = myBackup

结果myBackup =对原始对象的引用,myRef =对原始对象副本的引用吗?

3 个答案:

答案 0 :(得分:2)

在初始分配新对象后,无法更改C ++引用以引用它们。如果您需要这种行为,则必须使用指针。

答案 1 :(得分:0)

这段代码是否编译?如果你想重新分配,你应该在这里使用指针,因为引用不能被重新分配。一个简单的经验法则是,如果您希望能够使用指针重新分配变量,只要在当前情况下这样做是可取的。

例如:

void myFunction(std::vector<int*> myPtr) {}

答案 2 :(得分:0)

要解决此问题,您需要进行深层复制 你可以使用memcpy,但这不是一种安全的方式; 或者诸如

vector<int> newVector;
newVector.reserve(myRef.size()); //for performance, to avoid realloc
for (vector< int>::iterator it = myRef.begin();it!=myRef.end();++it)
   newVector.push_back(*it);
myRef = newVector;

在这一行之后

vector< int>& myBackup = myRef

重新声明myRef ...

时出现编译错误