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

C++ C++;:使用引用变量创建新对象,c++,vector,C++,Vector,在函数中,我得到一个向量的引用作为参数: void myFunc (vector< int>& myRef) {...} void myFunc(vector&myRef){…} 现在在这个函数中,我需要备份(因为myRef将变成其他内容)对特定向量的引用: vector< int>& myBackup = myRef vector&myBackup=myRef 现在我希望myRef成为该向量的新副本的引用。我该怎么做 我可以说 vector<

在函数中,我得到一个向量的引用作为参数:

void myFunc (vector< int>& myRef) {...}
void myFunc(vector&myRef){…}
现在在这个函数中,我需要备份(因为myRef将变成其他内容)对特定向量的引用:

vector< int>& myBackup = myRef
vector&myBackup=myRef
现在我希望myRef成为该向量的新副本的引用。我该怎么做

我可以说

vector< int> myRef = myBackup
vectormyRef=myBackup
?


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

C++引用在最初分配后不能更改为引用新对象。如果需要这种行为,就必须使用指针。

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

例如:

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

要解决此问题,您需要进行深度复制 您可以使用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;
向量newVector;
newVector.reserve(myRef.size())//为了提高性能,避免realloc
对于(vector::迭代器it=myRef.begin();it!=myRef.end();+it)
newVector.push_back(*it);
myRef=新向量;
在这一行之后呢

vector< int>& myBackup = myRef
vector&myBackup=myRef

重新声明myRef时出现编译器错误…

如果您在此处发布实际代码,以便我们可以看到您在什么范围内进行这些备份/复制,这将非常有用。