vector如何使用默认分配器?

Max*_*cci 5 c++

当我研究STL时,我已经通过分配器,我在互联网上发现了很多东西,或多或少我理解他们做了什么.我看过一个Custom Allocator来看看它们是如何实现的,但我的问题是它们是如何被容器使用的,让我们说到Vector中?

他们总是说vector正在使用DEFAULT Allocator.例如,空向量构造函数是:

   explicit vector (const allocator& alloc = allocator());
Run Code Online (Sandbox Code Playgroud)

但是vector如何使用allocator?

在场景后面的vector何时何地使用Allocator :: allocate()和Allocator :: construct()?

知道了,为什么需要自定义分配器,它会改变什么?

Nat*_*ohl 2

正如 @BenjaminLindley 提到的,容器内有很多地方可以使用分配器。一个例子是push_back它使用分配器特征在容器内构造其参数的副本

标准(23.2.3)描述push_back为:

a.push_back(t)
Run Code Online (Sandbox Code Playgroud)

附加 t 的副本。要求:T 应可复制插入到 X 中。

后来,术语 CopyInsertable 定义为:

T is CopyInsertable into X 意味着,除了 T 可以 MoveInsertable into X 之外,以下表达式也是格式正确的:

allocator_traits<A>::construct(a, p, t)
Run Code Online (Sandbox Code Playgroud)

...可以变成:

a.construct(p, t)
Run Code Online (Sandbox Code Playgroud)

...它有效地使用分配器来构造at locationa的副本。tp