【发布时间】:2016-10-03 13:34:37
【问题描述】:
我想跟踪一个向量中的一项并修改如下:
vector<myObj> v;
myObj obj = myObj(params)
v.push_back(myObj);
obj = myObj(params)
v.push_back(myObj);
obj = myObj(params)
v.push_back(myObj);
myObj* modThis = &v[2];
//modify modThis
但是当我在我的真实代码中做这样的事情时,它只会修改对象的副本,而不是修改向量内的实际对象。我打印了 modThis 和 &v[2] 的地址,它们不一样!我也尝试过类似以下的方法:
myObj modThis = v[2];
//modiy myObj
这似乎也只是创建了对象的副本并继续修改副本而不是存储在向量中的原始对象。
如何在不复制项目的情况下访问向量内对象的修改?我错过了什么?
注意:myObj 当前具有编译器生成的复制构造函数。
【问题讨论】:
-
比较地址时,您打印的是
modThis还是&modThis? -
我打印了 modThis 和 &v[2] ,它们不一样。
-
v.push_back(myObj);不会编译。请提供mcve,以便我们重现它。 -
在将
&v[2]保存到modThis后,您是否有机会向向量中添加或删除元素?这些操作使指向向量元素的部分或全部指针、引用和迭代器无效。
标签: c++ pointers vector reference