为什么get_allocator返回副本而不是引用

时间:2017-06-06 03:36:58

标签: c++ c++11 stdvector allocator

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

此处记录了这些内容:http://en.cppreference.com/w/cpp/container/vector/get_allocator

这是什么原因?

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

我错过了什么吗? 是否有一种解决方法可以让std::vector<T, special_allocator<T>>的内部分配器检查分配器的状态?

注意:如果分配器是有状态的,那么也许有一个假设一直使用引用?与std::vector<T, special_allocator<T>&>

一样

1 个答案:

答案 0 :(得分:3)

有状态分配器应该在保留其状态的情况下进行复制。

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

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

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