首页 > 解决方案 > C++:更新类的向量成员变量

问题描述

我有一个向量作为“B”类的成员。它有它的 set 和 get 函数:

setVector(vector<A*>)
getVector()

我有兴趣从另一个使用此类“B”对象的函数填充此向量。所以我创建了“A”类的新对象,并错误地更新了“B”类的向量成员变量:

A* obj = new A;
B b;
B.getVector().push_back(obj);

发生的事情是 push_back 不起作用。换句话说,当我尝试使用调试器查看成员变量时,我看到向量成员变量的容量仍然为 0,就好像我没有对其进行 push_back 任何操作一样。

我尝试将我的实现更改为:

vector<A*> tempVector;
B b;
A* obj = new A;
tempVector.push_back(obj);
b.setVector(tempVector);

它按预期工作。

我想了解为什么第一个行为是错误的?据我了解,B 类的构造函数应该默认创建一个向量。因此,当我使用 getVector() 函数时,它应该将创建的向量返回给我,然后我可以 push_back 给它。所以我想知道在这种情况下我做错了什么?

标签: c++stdvector

解决方案


问题可能是getVector(). 假设它被定义为vector<A*> getVector(),它按值返回向量,这意味着您push_back在向量的副本上执行了 ,而不是在实际的向量成员上。

如果您希望能够从类外部修改向量,您所要做的就是更改函数签名以通过引用传递它:vector<A*>& getVector(). 这将确保修改(例如push_back)发生在成员变量上。


推荐阅读