Sec*_*ret 1 c++ arrays constructor
在没有默认构造函数的情况下,在C++中创建对象数组已经有很多已回答的问题
我想要做的是创建一个允许我为每个元素都有自定义构造函数的数组.
在C++中执行此操作的最佳或最惯用的方法是什么?
例:
MyClass *myVar;
myVar = new MyClass[5];
int i = 0;
for(i = 0;i < num;i++)
myVar[i] = new MyClass(i,i);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您会看到一个指针数组,在for循环中,我们使用自定义构造函数参数创建一个对象.但是,我不确定这是否是最好的方法,因为它在堆上分配数据,可能不是连续的,分配问题,添加指针等.
我之所以提出这个问题,是因为我不想初始化n个对象的数组,只能用set_data方法编辑元素.
例:
[stuff] //initialize array with default values
for(i = 0;i < num;i++)
myVar[i].set_data(i)
Run Code Online (Sandbox Code Playgroud)
因为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);
Run Code Online (Sandbox Code Playgroud)
首先分配一个指针数组,然后用指针指针捕获它.然后你分配特定的对象.
关于你的问题,最好的办法就是不要发明轮子!只需使用std :: vector!例如,我想创建一个Cars数组,每个都有不同的公司和颜色:
std::vector<Car> cars;
cars.push_back(Car(Company::Toyota,Color::Red));
cars.push_back(Car(Company::Subaru,Color::Blue));
Run Code Online (Sandbox Code Playgroud)
向量首先尝试使用move-constructor(如果已实现),如果没有 - 复制构造函数.