Array/Vector 个具有元素自定义构造函数的对象

Array/Vector of Objects with custom constructors for elements

已经有很多关于在没有默认构造函数的情况下在 C++ 中创建对象数组的问题得到解答

how to dynamically declare an array of objects with a constructor in c++

Constructors and array of object in C++

我想做的是创建一个数组,让我可以为每个元素设置自定义构造函数。

用 C++ 执行此操作的最佳或最惯用的方法是什么?

示例:

MyClass *myVar;
myVar = new MyClass[5];
int i = 0;
for(i = 0;i < num;i++)
   myVar[i] = new MyClass(i,i);

在这种情况下,您会看到一个指针数组,并且在 for 循环中我们创建了一个具有自定义构造函数参数的对象。但是,我不确定这是否是最好的方法,因为它在堆上分配数据,可能不是连续的,分配问题,添加指针等。

我问这个问题的原因是我不想初始化一个包含 n 个对象的数组_只是为了使用 set_data 方法编辑元素。

示例:

[stuff] //initialize array with default values
for(i = 0;i < num;i++)
   myVar[i].set_data(i)

因为set_data可能会编辑一些只能在初始化时设置的数据。 (当然,可以使用 set 私有变量来跟踪对象是否已设置,但这似乎很笨重 - 或者这在 C++ 中通常是这样做的吗?

首先,您的第一个示例几乎是正确的:您需要一个指针数组,而不是对象:

MyClass **myVar;
myVar = new MyClass*[5];
int i = 0;
for(i = 0;i < num;i++)
   myVar[i] = new MyClass(i,i);

首先你分配一个指针数组,然后用一个指向指针的指针来捕获它。然后你分配特定的对象。

关于你的问题,最好的办法就是一开始就不要发明轮子!只需使用 std::vector! 例如,我想创建一个 Cars 数组,每个都有不同的公司和颜色:

std::vector<Car> cars;
cars.push_back(Car(Company::Toyota,Color::Red));
cars.push_back(Car(Company::Subaru,Color::Blue));

向量首先尝试使用移动构造函数,如果它被实现,如果没有 - 复制构造函数。