功能退出后,矢量数据消失

时间:2016-10-16 23:00:00

标签: c++ class vector

我有一个名为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内容。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

如果您想操纵Data对象,则必须声明process函数:

void myClass::process(Data& data);

您必须通过引用传递,否则当您将其传递给函数时,将会生成data的副本。上述函数原型中&之后的&符号(Data)表示&#34;引用data类型的变量Data。&#34;

您拥有它的方式,该功能对data所做的任何更改都将对此局部变量 。因此,当process函数退出时,将破坏更改。