[英]Vector of object pointers containing vectors end up pointing to same object
我在C ++中将多个对象存储在指向这些对象的指针的向量中:
vector<Host *> somevector;
然后,我像这样初始化每个项目:
somevector.push_back(new Host(x));
该对象带有一个初始化参数。 当我读取数据(字符串)并得到对象指针列表时,我将它们添加到对象本身内部的内部向量中:
somevector.at(i)->add(string data);
但是,似乎所有数据都已添加到同一对象,即使这些对象具有不同的名称,它们存储此数据的内部向量也相同。
我搜索了各种关键字来解决此问题,我认为这是复制构造函数的问题(我目前使用默认值)。 如何计算要复制的对象内的向量? 我是否必须将对象中的向量设置为字段,以便在复制构造函数中创建一个新的向量?
编辑:
我已经复制了对象类的代码:
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);
}
因此,我在宿主对象内使用此向量存储了一堆字符串。 然后,当我从主程序调用link时,我给它传递了一个随机数,我想从对象内部的列表中获取一个随机字符串。 但是,我的link()调用返回的字符串不应该存储在对象中。
从示例代码中可以看到,您发布的“ v”不是Host的成员对象。 因此,对Host :: add的调用只是将其推回到全局可用的向量。 这也许是您的问题所在吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.