为什么STL会为Allocator保留一个接口?以vector为例:
template<class T,class Allocator = std::allocator<T>>
class vector;
Run Code Online (Sandbox Code Playgroud)
因为我们有很多选择来分配内存和构造对象
operator new,delete,new[],delete[],这些对象几乎可以创建我们创建对象时所需的任何东西.
那么为什么STL容器vector需要一个Allocator接口,std::allocator如果我们不分配一个接口,那么它在大多数情况下是默认的?为什么不直接使用new表达式?
如果目的是使用户定义的分配行为成为可能,为什么不让用户提供自定义的operator new,new[]等等?
Yak*_*ont 10
如此具体的向量并改变它的分配方式而不改变所有向量的分配方式.
new必须在每个类型的基础上覆盖您分配或全局替换的内容. std::vector<int>并且std::vector<int, some_other_allocator>可以使用不同的分配策略; 实际上,分配器可以是有状态的并且具有共享状态.
一个经典的是快速堆栈分配器,在它超出范围之前不会解除分配.