我正在尝试构建一个对象数组,在集合上使用迭代器来获取值。
目前的代码是:
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的赋值运算符已被删除,其复制构造函数是私有的。
进一步的观点:
虽然我当然可以轻松地构建Object * []类型的东西,但它与代码中稍后的库调用不兼容。
容器没有'to array'方法或类似的东西。
答案 0 :(得分:1)
对于其他人通过搜索您的标题来查找此主题:如果不可复制的约束不适用,您将完全按照您的尝试从迭代器进行复制。
回答你的问题: 如果您在第三方 C ++ 库中找到一个名为“Object”的类,您应该立即将第三方库放入垃圾桶并找到由了解C ++的人编写的替代方案,而不是某人如此热爱Java(或其他具有共同基础对象的语言),他们决定尝试用这种行为无意义的语言模仿其行为。我不是想乱谈,但这是一个严重的危险信号。
然而,正如所说的,如果对象不是可复制构造的,那么在Object的实现中有很多可能的东西,类的作者知道,你不是,禁止复制。试图解决它是在寻找错误。
我的第一个想法是联系图书馆的作者并查询为什么他们认为该对象不可复制,以及可以为您的特定用途做些什么。
如果您只是想将对象的实例从一个数组移动到另一个数组,请考虑包含指向Objects或者shared_ptr指向Objects的指针而不是Object类本身,但要小心并理解您正在传递指向对象的指针和只有特定对象的实例。