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

时间:2015-03-03 09:18:21

标签: c++ arrays constructor

在没有默认构造函数

的情况下,在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 ++中完成的?

1 个答案:

答案 0 :(得分:6)

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

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));

向量首先尝试使用move-constructor(如果已实现),如果没有 - 复制构造函数。