【发布时间】:2019-05-14 09:26:31
【问题描述】:
我想知道向量在 C++ 中是如何工作的。当我们添加一个新元素并且向量用完空间时,它会分配一个新内存并将所有先前的元素复制到新位置。
现在,如何定义这种行为?
A* a = new A(prev_a);
将在新分配的新位置复制构造。但是对于向量,我们必须分配多个对象。但是我们不能这样做,因为数组 new 不能有初始化参数。
所以我想知道,vector 是如何实现这一点的?我假设向量首先分配内存并在特定位置调用复制构造函数。这是怎么做的?谢谢
【问题讨论】:
-
您可以查看成员 _M_allocate_and_copy 的 (GCC) 实现:
template<typename _ForwardIterator > pointer std::vector::_M_allocate_and_copy ( size_type __n, _ForwardIterator __first, _ForwardIterator __last ) -
请注意,有一个分配和多个复制构造,而不是分配加复制构造每个元素跨度>