四十一、auto不能用于分配数组
虽然我们用空括号对数组中的元素进行值初始化,但不能在括号中给出初始化器,这意味着不能用auto分配数组。
四十二、动态分配数组的列表初始化
在新标准中,我们可以提供一个元素初始化器的花括号列表://10个int分别用列表中对应的初始化器初始化
int *pia = new int[10]{0,1,2,3,4,5,6,7,8,9};
//10个string,前4个用给定的初始化器初始化,剩余的进行值初始化
string *pia3 = new string[10]{"a", "an", "the", string(3,'x')};
与内置数组对象的列表初始化一样,初始化器会用来初始化动态数组中开始部分的元素。如果初始化器数目小于元素数目,剩余元素将进行值初始化。如果初始化器数目大于元素数目,则new表达式失败,不会分配任何内存。
四十三、allocator分配未构造的内存
allocator分配的内存是未构造的(unconstructed)。我们按需要在此内存中构造对象。在新标准中,construct成员函数接受一个指针和零个或多个额外参数,在给定位置构造一个元素。额外参数用来初始化构造的对象。类似make_shared的参数,这些额外参数必须是与构造的对象的类型相匹配的回合肥的初始化器:auto q = p; //q指向最后构造的元素之后的位置
alloc.construct(q++); //*q为空字符串
alloc.consturct(