将参考变量分配给参考变量

时间:2018-07-19 05:47:43

标签: c++

如果我有以下指向vector的指针:

vector<int> *v = new vector<int>(10);

两者之间有什么区别

vector<int> &vr = *v;

vector<int> vr2 = *v;

根据我对参考文献的理解,对vrvr2的更改不会影响v。例如:

vr.at(0) = 5; 
vr2[1] = 6;
// v[0] and v[1] would not change to 5 and 6 respectively.

那么vrvr2之间的区别是什么?

2 个答案:

答案 0 :(得分:4)

  

根据我对参考文献的理解,对vr和vr2的更改不会影响v。例如:

这是一个错误的理解。

vr是对v指向的对象的引用。对vr所做的任何更改都会更改v指向的对象的内容。

另一方面,

vr2是副本。对vr2所做的任何更改只会影响vr2,而不会影响v指向的对象。

答案 1 :(得分:1)

在第一个片段中

vector<int> &vr = *v;

您声明对指向v*的向量的引用vr*v上的操作现在将具有相同的结果-这就是引用的本质。在这里,但是

vector<int> vr2 = *v;

您通过副本分配创建了一个新的向量v2。新向量在分配时拥有*v持有的相同数据。现在它们是两个独立的对象,更改其中一个不会影响另一个。