在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
中删除
发布于 2017-03-28 06:44:41
不是一个详尽的列表。
<stdexcept>
中的所有内容,它需要分配内存来存储消息字符串。boyer_moore_horspool_searcher
.stable_partition
stable_sort
算法尝试获取额外的内存(例如,boyer_moore_horspool_searcher
.stable_sort
),所有并行算法(不管标题)可能需要额外的内存。<
这个曾经在内部使用默认分配器,但看起来最新的草案删除了这一要求,尽管它似乎是意图still.
directory_iterator
和recursive_directory_iterator
。可以构造临时.的
在C++17.
promise
中删除的basic_regex
.thread
和async
.packaged_task
,分配器支持将需要放置共享state.error_code::message()
,error_condition::message()
,error_category::message()
:它们返回一个string
,所以默认分配器only.bitset
's流插入操作符名义上调用具有默认分配器的to_string
,尽管在practice.to_string
和to_wstring
自由函数分别返回std::string
/std::wstring
;没有机会指定您自己的分配器。显然,string
的用户定义文本(例如,"foo"s
)也没有自定义分配器support.<locale>
中的几个方面,这些方面具有返回std::string
或std::basic_string<charT>
的成员函数,即使用默认分配器(例如,numpunct
),或者只接受basic_string<charT>
(例如,<random>
中的money_get
).的vector
如果有人知道,为什么不在
any
中提供分配器支持,并将其从function
中删除?
any
的分配器支持是unimplementable,而function
的分配器支持是plagued with issues。
https://stackoverflow.com/questions/43056338
复制相似问题