12.4.3
NoDefault为一个没有默认构造函数的类
(3)NoDefault类型不能用作动态分配数组的元素类型
(4)NoDefault类型的静态分配数组必须为每个元素提供一个显式的初始化式、
原因:对于动态分配的数组,其元素只能初始化为元素类型的默认值,而对于静态数组,可以用初始化列表为数组元素提供不相同的初值,初始化列表中调用类的带参构造函数为数组中的对象赋初值。
(5)如果有一个保存NoDefault对象的容器,例如vector,就不能使用接受容器大小而没有同时提供一个元素初始化式的构造函数。
原因:例如,定义一个vector对象
vector<NoDefault> ivec(2); //确定元素的个数,并用默认构造函数给每个元素初始化
由于NoDefault没有默认构造函数,因此将不能自动初始化ivec中的元素。因此,应该在定义中加上元素的初始值
例如
vector<NoDefault> ivec(2,"a","b");