具有元素自定义构造函数的对象数组/向量

Array/Vector of Objects with custom constructors for elements

本文关键字:对象 数组 向量 构造函数 元素 自定义      更新时间:2023-10-16

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

如何在c++中用构造函数动态声明对象数组

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++中通常是这样做的?

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

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

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

对于你的问题,最好的方法不是首先发明轮子!只需使用std::vector!例如,我想创建一个汽车阵列,每个汽车都有不同的公司和颜色:

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

如果向量已实现,则首先尝试使用move构造函数,如果未实现,则尝试使用-copy构造函数。