gpt4 book ai didi

c++ - 复制对象数组

转载 作者:行者123 更新时间:2023-11-28 06:30:31 25 4
gpt4 key购买 nike

这是我以前没有做过的事情,想知道正确的方法应该是什么

如果你有一个微不足道的对象,例如:

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;

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

我知道标准选项是使用 vector 并利用它的调整大小功能,但我想更好地了解复制对象数组的正确操作应该是什么而不是样板答案

最佳答案

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

当它需要移动一个对象时,它会优先使用移动赋值/构造。如果那不可用,它将复制然后销毁旧的。

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

关于c++ - 复制对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com