复制对象数组

克里斯

这是我以前从未做过的事情,想知道应该使用什么适当的方法

如果您有一个琐碎的对象,例如:

struct simple_object {
    int i;
};

在您的应用程序中,您创建了以下形式的这些对象的数组:

simple_object *array = new simple_object[10];

我知道c ++的默认行为是分配数组并在每个对象上调用此类的默认构造函数,类似地,析构函数将在for的每个对象上调用delete [] array

当您想增加数组的大小时,会出现问题。例如,如果您想将数组的大小加倍,则可以执行以下操作:

simple_object *temp = new simple_object[20];
memcpy(temp, array, sizeof (simple_object) * 10);
delete [] array;
array = temp;

但是我认为这很危险,甚至可能无法正常工作(在更复杂的对象的析构函数中可能会发生一些冲突)。另一种选择是:

simple_object *temp = new simple_object[20];
for (i to 10)
{
   temp[i] = array[i];
}
delete [] array;
array = temp;

这样,数组中的每个元素都是默认构造的,并且每个对象的副本构造函数都将直接调用。这是复制对象数组的正确方法还是其他更标准的方法?

我知道标准的选择是使用向量并利用其调整大小功能,但我希望能更好地理解复制对象数组的正确操作是什么,而不是样板的答案

杰里·科芬(Jerry Coffin)

如果您坚持要这样做,那么您可能应该这样std::vector做。它使用operator new(通过分配器)分配原始内存然后,它用于placement new在该内存中创建项目。

当需要移动对象时,它将按优先级使用移动分配/构造。如果不可用,它将进行复制,然后销毁旧的。

无论哪种方式,它都不会像数组那样默认构造对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

深度复制对象数组

来自分类Dev

JavaScript复制对象数组

来自分类Dev

使用memcpy复制对象数组

来自分类Dev

流星/ MongoDB复制数组对象

来自分类Dev

Javascript数组对象复制合并

来自分类Dev

在javascript中深度复制嵌套对象的数组

来自分类Dev

将json从对象复制到数组?

来自分类Dev

Javascript中的数组和对象复制

来自分类Dev

复制对象的可变数组比较

来自分类Dev

指向对象指针数组的指针的深层复制

来自分类Dev

将json从对象复制到数组?

来自分类Dev

将对象复制到数组

来自分类Dev

java对象复制,数组索引越界

来自分类Dev

使用对象复制数组的最佳实践

来自分类Dev

复制不可变数组或对象

来自分类Dev

在猫鼬中复制数组中的对象

来自分类Dev

复制对象时如何复制Ruby数组成员?

来自分类Dev

复制对象数组,然后修改原始对象而不影响副本

来自分类Dev

在多个数组中复制一个对象数组

来自分类Dev

复制Java对象数组的一部分

来自分类Dev

使用for / in将对象属性复制到数组中

来自分类Dev

将数据复制到对象的嵌套数组中

来自分类Dev

React-深度复制数组和对象问题

来自分类Dev

如何在JavaScript中复制JSON对象数组

来自分类Dev

复制构造函数未从类对象获取数组大小

来自分类Dev

将对象添加到NSMutable数组,深层复制

来自分类Dev

复制Java对象数组的一部分

来自分类Dev

将json对象复制到javascript数组

来自分类Dev

Typescript/Angular 数组在复制时操作对象