【发布时间】:2018-02-16 13:58:14
【问题描述】:
为什么 STL 为分配器保留一个接口?
以vector 为例:
template<class T,class Allocator = std::allocator<T>>
class vector;
由于我们有很多选项可以分配内存和构造对象,例如operator new,delete,new[],delete[],当我们创建对象时,它们几乎可以做我们需要的任何事情。
那么为什么像vector 这样的STL 容器需要一个分配器接口,如果我们不设置一个分配器接口,大多数时候它是默认的std::allocator? 为什么不直接使用 new 表达式?
如果目的是让用户自定义的分配行为成为可能,为什么不让用户提供自定义的operator new,new[]等呢?
【问题讨论】:
-
如果你想改变vector分配内存的方式,如果没有分配器,你会怎么做?
-
您不能为
int重载new,除非您重载了您可能不想做的全局变量。 -
如果你想改变恰好一个向量,of many持有特定类型,分配它的内存,如果有,你会怎么做没有分配器?
-
@bigxiao C++ 被设计为尽可能通用(从没有堆的微控制器到具有分布式内存的超级计算机)。提供一个分配器就可以做到这一点。考虑到它是默认的,这真的没什么大不了的,所以如果你不想使用自定义分配器,你不需要做任何事情。分配器虽然比重载
new运算符更灵活。 -
@Caleth 提供自定义
operator new怎么样,虽然不会改变内置类型
标签: c++