c++ - 什么是 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
?
解决方案
简而言之,能够控制如何分配动态内存很有用。显而易见的答案是new
and delete
,但有时人们会使用其他类型的内存分配,例如预先分配大量内存并将其分块或仅将堆栈用作内存。
分配器模型对此进行了抽象,通过提供给容器内存以供使用的函数。我们并不真正关心我们使用的内存来自哪里,只是在我们需要的时候有足够的内存。
std::allocator
本身使用new
and delete
,并且是所有标准库容器的模板默认值。当您不想要任何其他分配模型时,这是默认选择。因此,为了回答您的问题,std::allocator
只要您不为容器提供另一个分配器,您就会一直使用它。
推荐阅读
- java - Spring boot JAR 作为 Windows 服务和外部 application.yml
- django - 我无法在 /events/ 错误处解决 NoReverseMatch
- apache-crunch - 将 apache crunch Pcollection 写入多个输出文件
- mysql - MySql中只有输入标记时如何解析单词?
- javascript - QlikSense Field selectValues API - 当字段名称是混搭应用程序中的日期数据类型时不起作用
- json - React Native - NSNumber 类型的 JSON 值“1311”无法转换为 NSDictionary
- google-apps-script - 我无法在具有编辑权限的 Google 表格上创建脚本
- python - TensorFlow:没有名为 Pandas 的模块(我已经有了 Pandas)
- azure - Azure Cosmos DB SQL API
- c# - RSA-SHA256 签名不匹配