是标准所要求的向量重新分配和向量::push_back,以使用placementnew和copy构造函数
is vector reallocation and vector::push_back required by the standard to use placement new and copy constructor?
抛开move语义不谈,使用placement-new和copy构造函数的标准是否需要向量重新分配和向量::push_back?如果是的话,标准中哪里有这样的规定?
是和否。Vector和所有其他容器一样,需要使用allocator_traits<allocator_type>::construct
和allocator_traits<allocator_type>::destroy
(§23.2.1/3)和使用分配器获取所有内存(§23.2.1/7)。如果提供一个自定义分配器,您几乎可以做任何事情。这个调用::operator new
需要默认分配器(§20.6.9.1/6)和使用新位置(§20.6.9.1/12)。
C++11§23.3.6.3,关于
std::vector::reserve
:“如果不是由非
CopyInsertable
类型的move构造函数引发异常,则不会产生任何影响”
这意味着,对于具有非CopyInsertable
项类型的缓冲区重新分配,实现可以自由地将项从旧缓冲区移动到新缓冲区,如果可能,则不使用类型’s复制构造函数。
在上面引用的段落中,移动构造函数的异常的影响没有明确说明,这在关于insert
和push_back
的§23.3.6.5中明确规定:“如果非CopyInsertable
T
的move构造函数引发异常,则其影响是未指定的”
使用新职位是隐含的,因为;语言是什么;在预先存在的存储中构造对象的唯一功能。正如James Kanze在回答中指出的那样;s也明确要求通过分配器的要求,以及§23.2.1/2要求分配器;s的CCD_ 11方法。
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 我们可以使用Back() - 值索引在其上执行向量插入
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- 修改向量后引用 vector.back() 的奇怪行为
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- Vector_push back未填充向量(c++)
- C++为空向量上的向量返回什么::back()
- 我如何修复这段代码,使它不会pop_back或back()如果向量/堆栈是空的
- 向量resize(), push.back(), reserve()方法