p = new T[N] {initializer1, ..., initializerN};这是C++11中用new来申请一块数组时候的语法。后面的{}中可以传递参数,从而调用不同的constructor;
考虑下列代码;
struct Workshops {
int start;
int end;
int duration;
Workshops(){};
Workshops(int a,int b,int c):start(a),end(b),duration(c) {};
};
Workshops* p = new Workshops[5]{{1,2,3},{3,4,5}};
加粗的那一行,传入构造函数的参数为{1,2,3},{3,4,5},所以自动调用了workshop(int a,int b,int c)这个constructor。剩下的自动用default constructor补充上了。
另外注意一点,即
Workshops* p = new Workshops[2]{{1,2,3},{3,4,5}};
我传了两组initializer 进去,按理说已经足够了。但是如果你把default constructor删除掉,C++还是会报错,说没有matching的constructor。
所以这里注意一下,如果想在new的过程中赋予参数,一定要记得写default constructor.