我有一个名为VEC的自定义矢量类和一个名为Data的类,它包含一个名为v的VEC的std :: vector .VEC充当一个非常简单的向量,只存储4个值。
vector<VEC> v;
在其他地方,我有两个功能;过程和创造。我的process()应该接受一个Data对象作为参数,然后改变它的内容。它被声明为
void myClass::process(Data data);
在这个函数中,我创建了一个VEC的临时向量,然后将其内容推送到数据的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()在向量数据列表中的每个Data对象上调用process()。出于测试目的,这个只使用第一个元素。
void myClass::create() {
process(dataList[0]);
cout << dataList[0].v.size() << endl;
}
这是打印出来的
3
0
正如您所看到的,它在process()函数中正常工作,但是只要该函数退出,v向量就会自动清空。这是一个问题,因为我需要每个Data对象在调用process()之后保存它的新v内容。这是怎么回事?
答案 0 :(得分:1)
如果您想操纵Data
对象,则必须声明process
函数:
void myClass::process(Data& data);
您必须通过引用传递,否则当您将其传递给函数时,将会生成data
的副本。上述函数原型中&
之后的&符号(Data
)表示&#34;引用data
类型的变量Data
。&#34;
您拥有它的方式,该功能对data
所做的任何更改都将对此局部变量 。因此,当process
函数退出时,将破坏更改。