c++ - 包含 vector 的对象指针的 vector 最终指向同一个对象

标签 c++

我将多个对象存储在指向这些对象的指针 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/

相关文章:

c++ - 如何在 2 个进程之间共享 COM 对象?

c++ - 访问冲突。使用 GLEW 和 GLFW 时

c++ - std::forward 模板和非模板函数中的测试

c++ - 迭代并从 std::map 中删除某些元素时出现段错误?

c++ - 使用索引 vector 重新排序 vector

c++ - 如何对模板参数实现 child-of-X 限制?

c++ - shared_future<void> 是 condition_variable 的合法替代品吗?

c++ - 解决 USACO 1.1 – Friday the Thirteenth with date.h

c++ - C++中文本编辑器的链接列表

c++ - 交叉编译qt : Error while loading shared libraries