C++:更新类的向量成员变量

C++: updating a vector member variable of a class

本文关键字:向量 成员 变量 更新 C++      更新时间:2023-10-16

我有一个向量作为类"B"的成员。它有自己的设置和获取功能:

setVector(vector<A*>)
getVector()

我感兴趣的是从另一个函数中填充这个向量,该函数使用类"B"的对象。因此,我创建了类"A"的新对象,并错误地更新了类"B"的向量成员变量:

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

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

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

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

它如预期的那样发挥了作用。

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

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

如果你想从类外修改向量,你所要做的就是更改函数签名,改为通过引用传递:vector<A*>& getVector()。这将确保对成员变量进行修改(如push_back(。

getVector()的签名可能类似于std::vector<A*> getVector()。这将返回实际矢量的副本。然后push_back到复制的向量,但永远不要修改成员变量。你想返回一个参考:

std::vector<A*> &getVector();
const std::vector<A*> &getVector() const;