我正在使用自定义分配器,它内部有一个简单的小状态。当我将它与 std::vector
一起使用时,我很惊讶地看到 get_allocator()
实际上将拷贝返回给分配器。
此处记录:http://en.cppreference.com/w/cpp/container/vector/get_allocator
这是什么原因?
我能想到的一个原因是 get_allocator
是 const
成员(member),我不介意得到一个const
对分配器的引用。除了内部分配器之外,还可以声明 mutable
.
我错过了什么吗?
有没有解决方法来获取 std::vector<T, special_allocator<T>>
的内部分配器?检查分配器的状态?
注意:如果分配器是有状态的,那么也有可能应该一直使用引用?喜欢std::vector<T, special_allocator<T>&>
最佳答案
有状态分配器应该在复制时保留其状态。
例如,当您为 map 传递一个分配器时,它会反弹到另一个分配器类型,但仍保留您传递给它的状态。
或者两个不同的容器共享分配器状态,但它们有不同的分配器实例。
通常,您的分配器具有指向您的状态的指针。将指向您的状态的指针作为分配器构造函数的参数,并将其作为容器构造函数的参数传递。
关于c++ - 为什么 get_allocator 返回拷贝而不是引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381008/