作者:YY666JAME_381 | 来源:互联网 | 2022-12-04 11:45
1> taskinoor..:
如果我使用new和delete会出现什么问题?
T* p = new T[newallow];
一个原因是如果T
没有默认构造函数,这将无法编译.
分配器的基本思想是分离分配内存和对象构造的步骤.默认new
结合了两者.在vector
保留的情况下,我们只想分配所需的内存.我们当时无法构造或初始化对象,因为类型可能不是默认构造的.只有当我们传递对象以存储在某些其他操作中时,才可以稍后构造对象,例如
v[i] = myObj;
如果不在两个不同的步骤中分离内存分配和对象构造,则无法实现这一点.
另请注意,当有人想要自定义内存分配时,分配器具有高级用法.
书中提到我们必须使用std :: allocator,因为向量的数据结构包含一些初始化数据和一些未初始化的数据.
这里作者的意思是,通过调用增加容量,reserve
我们将有两种类型的数据:
向量中需要移动到新空间的现有对象.它们是初始化数据.
额外保留的空间,它不存储任何对象,因此未初始化.