为什么 get_allocator returns 是副本而不是参考

Why get_allocator returns a copy and not a reference

我正在使用自定义分配器,它内部有一个简单的小状态。当我将它与 std::vector 一起使用时,我惊讶地发现 get_allocator() 实际上 returns 复制到分配器。

此处记录:http://en.cppreference.com/w/cpp/container/vector/get_allocator

这是什么原因?

我可以想象的一个原因是 get_allocator 是一个 const 成员,我不介意获得对分配器的 const 引用。除了内部分配器之外,还可以声明 mutable.

我是不是漏掉了什么? 是否有解决方法让 std::vector<T, special_allocator<T>> 的内部分配器检查分配器的状态?

注意:如果分配器是有状态的,也有可能 应该 一直使用引用?喜欢std::vector<T, special_allocator<T>&>

有状态分配器应该在复制时保留其状态。

例如,当您为地图传递一个分配器时,它会反弹到另一个分配器类型,但仍保留您传递给它的状态。

或者两个不同的容器共享分配器状态,但它们具有不同的分配器实例。

通常,您的分配器具有指向您的状态的指针。将指向您的状态的指针作为分配器构造函数的参数,并将其作为容器构造函数的参数传递。