首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >分配但不使用分配器的标准库工具

分配但不使用分配器的标准库工具
EN

Stack Overflow用户
提问于 2017-03-28 04:55:36
回答 1查看 487关注 0票数 11

在C++标准库分配内存的大多数地方,用户可以通过提供满足Allocator requirements的类来定制内存。例如,几乎所有的容器都有一个分配器模板参数,std::allocate_shared返回一个shared_ptr,它包含的元素和控制块都是通过提供的分配器分配的。

然而,在一些地方,标准库可以(潜在地)分配内存,但没有提供Allocator支持。我能想到的是:

  • std::make_unique() (没有对应的allocate_unique())
  • std::any
  • std::function (将在C++17)
  • std::valarray
  • std::basic_filebuf中删除分配器支持)(尽管std::basic_stringbuf使用Allocator)
  • std::inplace_merge()

问题:

  • 我确信这个列表是不完整的,但是我还遗漏了什么?非分配器类和函数的
  • ,它们是否被指定为使用全局::operator new、普通new,或者是谁都知道的内存源,为什么不在any中提供分配器支持并将其从function

中删除

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-28 06:44:41

不是一个详尽的列表。

  • <stdexcept>中的所有内容,它需要分配内存来存储消息字符串。
  • 标准的池/单调内存资源类显然会分配内存,但它们是从另一个内存资源而不是分配器执行的,因此从技术上讲,它们适合您的boyer_moore_horspool_searcher.
  • Several和stable_partition stable_sort算法尝试获取额外的内存(例如,boyer_moore_horspool_searcher.
  • Several、stable_sort),所有并行算法(不管标题)可能需要额外的内存。

<

  • >H115stable_sort>文件系统库中的许多内容:

这个曾经在内部使用默认分配器,但看起来最新的草案删除了这一要求,尽管它似乎是意图still.

  • directory_iteratorrecursive_directory_iterator。可以构造临时.

  • 一些文件系统操作

在C++17.

  • promise中删除的
  • basic_­regex.
  • threadasync.
  • packaged_task,分配器支持将需要放置共享state.
  • iostreams.
  • Many的地方硬编码为使用默认分配器的东西:
    • error_code::message()error_condition::message()error_category::message():它们返回一个string,所以默认分配器only.
    • bitset's流插入操作符名义上调用具有默认分配器的to_string,尽管在practice.
    • The中没有高质量的实现可以做到这一点,但to_stringto_wstring自由函数分别返回std::string/std::wstring;没有机会指定您自己的分配器。显然,string的用户定义文本(例如,"foo"s)也没有自定义分配器support.
    • There是<locale>中的几个方面,这些方面具有返回std::stringstd::basic_string<charT>的成员函数,即使用默认分配器(例如,numpunct),或者只接受basic_string<charT> (例如,<random>中的money_get).
    • Various类型使用具有默认allocator.

vector

如果有人知道,为什么不在any中提供分配器支持,并将其从function中删除?

any的分配器支持是unimplementable,而function的分配器支持是plagued with issues

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43056338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档