C++中创建自定义类型的数组的方式有三种,我们分别进行表述:
1、使用new运算符直接在堆中创建:
//使用A的默认构造函数,然后对其进行赋值操作
A* a=new A[size];
A* a=new A[size]();
a[0]=A();
a[1]=A(arguments);
...
2、使用new运算符结合数组类型进行创建:
A* a=new A[size]{A(),A(arguements),...};
3、直接使用数组在栈中直接创建:
A a[size]={A()/A(arguements),...};
下面我们通过一个例子对上述三种创建数组的方式进行比较:
#include <iostream>
#include <string>
using namespace std;
class Base{
private:
int i;
public:
Base(){
cout << "默认构造函数" << endl;
}
Base(int i) :i(i){
}
friend ostream& operator<<(ostream& os, Base& base){
os << base.i;
return os;
}
virtual void show(){
cout << i << endl;
}
~Base(){
cout << "进行Base的析构:" << i << endl;
}
};
int main(){
Base *base0 = new Base[5]{Base(1),Base(2),Base(3),Base(4),Base(5)};
delete[] base0;
Base base2[5] = {Base(6),Base(7),Base(8),Base(9),Base(10)};
Base* base = new Base[5];
base[0] = Base(11);
base[1] = Base(12);
base[2] = Base(13);
base[3] = Base(14);
base[4] = Base(15);
delete[] base;
return 0;
}
运行结果:
所以我们可以看到有三种创建类数组的方法,然后,我们需要其中两类通过new指针在堆中创建,余下的一种方法是直接在栈中创建了,希望各位可以在使用的时候认真比较,发现其中的乐趣!