从迭代器复制C++对象
Copying C++ objects from an iterator
我正在尝试构建一个对象数组,在集合上使用迭代器来获取值。
当前代码为:
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类本身,但要小心,并理解您正在传递指向特定对象的唯一实例的指针。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象