在C++标准库分配内存的大多数地方,用户都可以通过提供一个符合
然而,在一些可能分配内存但没有提供
Allocator
要求的类来自定义内存分配。例如,几乎所有容器都需要一个allocator模板参数,并且std::allocate_shared
返回一个shared_ptr
,其包含的元素和控制块都是通过提供的Allocator分配的。然而,在一些可能分配内存但没有提供
Allocator
支持的地方,我能想到以下几个:
std::make_unique()
(没有对应的allocate_unique()
)std::any
std::function
(C++17将删除allocator支持)std::valarray
std::basic_filebuf
(尽管std::basic_stringbuf
使用了Allocator)std::inplace_merge()
- 我相信这个列表不完整,但是还有什么我错过了吗?
- 在非分配器类和函数中,它们是否指定使用全局
::operator new
、普通new
,还是内存来源未指定? - 如果有人知道,为什么不在
any
中提供分配器支持,并将其从function
中删除呢?