从迭代器复制C++对象

Copying C++ objects from an iterator

本文关键字:对象 C++ 复制 迭代器      更新时间:2023-10-16

我正在尝试构建一个对象数组,在集合上使用迭代器来获取值。

当前代码为:

Object array[n]; //n is defined higher up the program
int index = 0;
for (iterator i = container.begin(), ie = container.end(); i != ie;++i) {
  Object f = *i;
  array[index] = f;
  index++;
}

我已经抽象了一些东西,对象和容器是来自第三方库的类。

这段代码可以工作,但Object的赋值运算符已被删除,其复制构造函数是私有的。

进一步要点:

虽然我当然可以很容易地构建Object*[]类型的东西,但它与代码后面的库调用不兼容。

容器没有"to array"方法或类似方法。

对于其他通过搜索您的标题来找到此主题的人:如果不适用不可复制的约束,您将完全按照您尝试的方式从迭代器中复制。

要回答您的问题:如果你在第三方C++库中发现了一个名为"Object"的类,你应该立即将该第三方库扔进垃圾桶,并找到一个由懂C++的人编写的替代方案,而不是一个非常喜欢Java(或另一种有共同基础Object的语言)的人,他们决定尝试在一种行为毫无意义的语言中模仿它的行为。我不是想说垃圾话,但这是一个严重的危险信号。

然而,正如前面所说,如果对象是不可复制的,那么在对象的实现中很可能有一些东西,类的作者知道,而你不知道,禁止复制。试图绕过它就是在寻找漏洞。

我的第一个想法是联系库的作者,询问他们为什么认为该对象不可复制,以及可以为您的特定用途做些什么。

如果您只是想将Object的实例从一个数组移动到另一个数组,请考虑包含指向Objects的指针,或者可能包含指向Object的shared_ptr,而不是Object类本身,但要小心,并理解您正在传递指向特定对象的唯一实例的指针。