首页 > 解决方案 > 什么是 std::allocator,我为什么需要它?

问题描述

cpp 参考的第一行说“如果没有提供用户指定的分配器,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

标签: c++

解决方案


简而言之,能够控制如何分配动态内存很有用。显而易见的答案是newand delete,但有时人们会使用其他类型的内存分配,例如预先分配大量内存并将其分块或仅将堆栈用作内存。

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

std::allocator本身使用newand delete,并且是所有标准库容器的模板默认值。当您不想要任何其他分配模型时,这是默认选择。因此,为了回答您的问题,std::allocator只要您不为容器提供另一个分配器,您就会一直使用它。


推荐阅读