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时出现编译器错误…如果您在此处发布实际代码,以便我们可以看到您在什么范围内进行这些备份/复制,这将非常有用。