我将多个对象存储在指向这些对象的指针 vector 中,就像在 C++ 中一样:
vector<Host *> somevector;
然后我像这样初始化每个项目:
somevector.push_back(new Host(x));
该对象接受一个初始化参数。 当我读取数据(字符串)并以对象指针列表结束时,我将它们添加到对象本身的内部 vector 中:
somevector.at(i)->add(string data);
但是,看起来所有数据都已添加到同一个对象中,即使对象具有不同的名称,但它们存储此数据的内部 vector 是相同的。
我搜索了各种关键字来解决这个问题,我认为这是复制构造函数的问题(我目前使用的是默认值)。我如何解释我正在复制的对象内部的 vector ?我是否必须使对象中的 vector 成为一个字段,以便在复制构造函数中创建一个新的字段?
编辑:
我已经复制了对象类的代码:
vector<string> v;
Host::Host(string _x): x(_x)
{
}
Host::~Host()
{
}
string Host::name()
{
return x;
}
string Host::link(int r)
{
int i = r % v.size();
return v.at(i);
}
void Host::add(string data)
{
v.push_back(data);
}
所以我在宿主对象中使用这个 vector 来存储一堆字符串。然后,当我从我的主程序调用 link 时,我将一个随机数传递给它,我想从对象内部的列表中获取一个随机字符串。但是,我的 link() 调用返回了不应存储到对象中的字符串。
最佳答案
从您发布的示例代码中我可以看出,“v”不是主机的成员对象。所以对 Host::add 的调用只是推回一个全局可用的 vector 。这可能是您的问题所在?
关于c++ - 包含 vector 的对象指针的 vector 最终指向同一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621417/