在一个函数中,我得到一个参数:vector:
void myFunc (vector< int>& myRef) {...}
现在在这个函数中我需要备份(因为myRef将成为别的东西)对该特定向量的引用:
vector< int>& myBackup = myRef
现在我想让myRef成为对该向量的新副本的引用。我该怎么做?
我可以说
vector< int> myRef = myBackup
结果myBackup =对原始对象的引用,myRef =对原始对象副本的引用吗?
答案 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 ...
时出现编译错误