我正在使用自定义分配器,它在内部具有一个小的简单状态。当我将其与std::vector
一起使用时,我惊讶地发现get_allocator()
实际上将副本返回到分配器。
此处记录了这些内容: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>&>
答案 0 :(得分:3)
有状态分配器应该在保留其状态的情况下进行复制。
例如,当您为地图传递分配器时,它会反弹到另一个分配器类型,但仍保留您传递给它的状态。
或者两个不同的容器共享分配器状态,但它们具有不同的分配器实例。
通常,您的分配器具有指向您的状态的指针。将指向您的状态的指针作为allocator构造函数的参数,并将其作为容器构造函数的参数传递。