首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数退出后向量数据消失。

函数退出后向量数据消失。
EN

Stack Overflow用户
提问于 2016-10-16 23:00:00
回答 1查看 1.3K关注 0票数 0

我有一个名为VEC的自定义向量类和一个名为Data的类,它包含一个名为VEC的VECs::VECs向量,它充当一个非常简单的向量,只存储4个值。

代码语言:javascript
复制
vector<VEC> v;

在其他地方,我有两个功能: process和create。我的process()应该接受一个数据对象作为参数,然后修改它的内容。它被宣布为

代码语言:javascript
复制
void myClass::process(Data data);

在这个函数中,我创建一个VECs的临时向量,然后将它的内容推入数据的v中:

代码语言:javascript
复制
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()。为了测试目的,这个元素只使用第一个元素。

代码语言:javascript
复制
void myClass::create() {
    process(dataList[0]);
    cout << dataList[0].v.size() << endl;
  }

这就是它打印出来的

代码语言:javascript
复制
3
0

正如您所看到的,它在process()函数中正常工作,但是当该函数退出时,v向量似乎就会清空自己。这是一个问题,因为在调用process()之后,我需要每个数据对象保存它的新v内容。这里发生了什么事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-16 23:02:11

如果要操作Data对象,则必须将process函数声明为:

代码语言:javascript
复制
void myClass::process(Data& data);

您必须通过引用传递,否则当您将data传递给函数时,将生成它的副本。在上述函数原型中,在&之后的Data表示“引用类型为Data的变量data”。

按照您的方式,该函数对data所做的任何更改都将只对这个局部变量执行--仅。因此,当process函数退出时,这些更改将被销毁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40076408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档