包含传染媒介的对象尖传染媒介最终指向同一个对象

时间:2011-04-11 12:42:22

标签: c++

我将多个对象存储在指向这些对象的指针向量中,就像在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()调用将返回不应存储到对象中的字符串。

1 个答案:

答案 0 :(得分:1)

从我发布的示例代码中我看到的'v'不是Host的成员对象。所以调用Host :: add只是简单地推回到全局可用的向量。这可能是您的问题所在吗?