什么是std :: allocator,为什么需要它?

时间:2019-04-01 09:03:29

标签: c++

cpp reference的第一行说:“如果没有提供用户指定的分配器,则std :: allocator类模板是所有标准库容器使用的默认分配器...”从给定的示例中,我可以看到用来根据类型进行一些内存分配:

std::allocator<int> a1;   // default allocator for ints
int* a = a1.allocate(1);  // space for one int
a1.construct(a, 7);       // construct the int
std::cout << a[0] << '\n';
a1.deallocate(a, 1);      // deallocate space for one int

但是我仍然可以执行以下操作:

auto a = std::make_unique<int>(7); // single int usage

和一些std容器,如果我想要多个具有连续访问权限的整数。

那么我何时以及为什么需要std::allocator

1 个答案:

答案 0 :(得分:1)

简而言之,能够控制分配动态内存的方式很有用。显而易见的答案是php.ininew,但是有时人们会使用其他类型的内存分配,例如预先分配大量内存并对其进行分块,或者只是将堆栈用作内存。

分配器模型通过提供给容器以供其玩耍的函数的功能对此进行了抽象。我们并不真的在乎我们使用的内存来自哪里,只是在需要时有足够的内存。

delete本身使用std::allocatornew,并且是所有标准库容器的默认模板。当您不需要任何其他分配模型时,这是默认选择。因此,为回答您的问题,只要不为容器提供其他分配器,就始终使用delete