向量含有矢量对象指针的最终指向同一对象
我存储在指针这些对象的矢量的多个对象,像这样,在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()调用返回了不应该存储到对象中的字符串。
从我所看到的示例代码中,您发布'v'不是主机的成员对象。所以对Host :: add的调用只是简单地推回到全局可用的向量。这可能是你的问题所在吗?
这似乎是问题;我想要矢量v是link()和add()虽然可以访问的矢量;我怎么能够做到这一点,而无需在文件中创建v全局? – Nordak 2011-04-11 13:14:28
@Nordak:你会想让'v'成为'Host'类的成员变量。然后,每个“主机”将拥有自己的副本。 – dfan 2011-04-11 13:18:12
类似以下的接口将允许添加和链接与同一'v'对话,同时为主机的每个实例保留单独的'v'。 'class Host { private: vector
你应该向我们展示实际的代码 - 根据你给我们的信息,我们只能猜测。 – 2011-04-11 12:45:24
没有看到“对象”的代码,这是不可能知道的,但你几乎肯定不应该使用原始指针。 – Puppy 2011-04-11 12:46:02
一些提示:不要使用'somelist.at(i)',你可以使用'somelist [i]'。另外,这似乎是使用['boost :: ptr_vector'](http://boost.org/doc/libs/1_46_1/libs/ptr_container/doc/ptr_vector.html)的理想场景。 – 2011-04-11 12:47:56