我有一个名为VEC的自定义向量类和一个名为Data的类,它包含一个名为VEC的VECs::VECs向量,它充当一个非常简单的向量,只存储4个值。
vector<VEC> v;在其他地方,我有两个功能: process和create。我的process()应该接受一个数据对象作为参数,然后修改它的内容。它被宣布为
void myClass::process(Data data);在这个函数中,我创建一个VECs的临时向量,然后将它的内容推入数据的v中:
VEC v1(1, 1, 1, 1);
VEC v2(2, 2, 2, 2);
VEC v3(3, 3, 3, 3);
vector<VEC> temp;
temp.push_back(v1);
temp.push_back(v2);
temp.push_back(v3);
for (int i = 0; i < 3; i++)
{
data.v.push_back(vtemp[i]);
}
cout << data.v.size() << endl;如你所料,这个打印出3。
现在问题就发生在这里。另一个函数create()对向量datalist中的每个数据对象调用process()。为了测试目的,这个元素只使用第一个元素。
void myClass::create() {
process(dataList[0]);
cout << dataList[0].v.size() << endl;
}这就是它打印出来的
3
0正如您所看到的,它在process()函数中正常工作,但是当该函数退出时,v向量似乎就会清空自己。这是一个问题,因为在调用process()之后,我需要每个数据对象保存它的新v内容。这里发生了什么事?
发布于 2016-10-16 23:02:11
如果要操作Data对象,则必须将process函数声明为:
void myClass::process(Data& data);您必须通过引用传递,否则当您将data传递给函数时,将生成它的副本。在上述函数原型中,在&之后的Data表示“引用类型为Data的变量data”。
按照您的方式,该函数对data所做的任何更改都将只对这个局部变量执行--仅。因此,当process函数退出时,这些更改将被销毁。
https://stackoverflow.com/questions/40076408
复制相似问题