Tri*_*dle 10 c++ memory-management allocator c++-standard-library
在C++标准库分配内存的大多数地方,用户可以通过提供满足Allocator
要求的类来自定义它.例如,几乎所有容器都接受一个allocator模板参数,并std::allocate_shared
返回一个shared_ptr
包含的元素和控制块都通过提供的Allocator分配.
但是,标准库可以(可能)分配内存的地方有一些,但是没有Allocator
提供支持.我能想到的是:
std::make_unique()
(没有相应的allocate_unique()
)std::any
std::function
(分配器支持将在C++ 17中删除)std::valarray
std::basic_filebuf
(虽然std::basic_stringbuf
不使用分配器)std::inplace_merge()
问题:
::operator new
,plain new
还是未指定的内存源?any
并将其从中删除的原因是function
什么?不是一个详尽的清单.
<stdexcept>
,需要分配内存来存储消息字符串.boyer_moore_searcher
和boyer_moore_horspool_searcher
.<algorithm>
算法试图以获得附加的存储器(例如,stable_partition
,stable_sort
)和所有的并行算法(不管头的)可能需要额外的存储器.path
; 那个曾经在内部使用默认的分配器,但看起来最新的草案删除了这个要求,虽然它似乎仍然是意图.directory_iterator
和recursive_directory_iterator
.path
s的文件系统操作.basic_regex
.thread
和async
.packaged_task
,在C++中删除了分配器支持17.promise
将需要某个地方来放置共享状态.error_code::message()
,error_condition::message()
,error_category::message()
:这些返回string
,所以只能默认分配器.bitset
流插入运算符在逻辑上to_string
使用默认分配器调用,但实际上没有高质量的实现可以实现.to_string
和to_wstring
免费函数返回std::string
/ std::wstring
分别; 没有机会指定自己的分配器.显然,用户定义的文字string
(例如"foo"s
)也没有自定义分配器支持.<locale>
使成员函数返回std::string
或者std::basic_string<charT>
,即使用默认分配器(例如numpunct
),或仅接受basic_string<charT>
(例如money_get
).<random>
使用vector
默认分配器.如果有人知道,没有提供分配器支持
any
并将其从中删除的原因是function
什么?
any
分配器的支持是无法实现的.function
分配器支持的指定很差,并且存在问题.