c++ - 为什么 get_allocator 返回拷贝而不是引用

标签 c++ c++11 stdvector allocator

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

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

这是什么原因?

我能想到的一个原因是 get_allocatorconst成员(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/

相关文章:

c++ - 清空自身的函数指针 vector

c++ - 关于从类里面获取值(value)的问题

c++ - 在使用 GCC 4.8.5 构建的应用程序中未定义对 cxx11 函数的引用

c++ - std::vector::resize() 与 gcc 4.7.0 的奇怪行为

c++ - 运算符 [] 错误的矩阵类代理

c++ - 获取 vector 中的特定元素

c++ - 将 NULL 传递给 std::wstring 时如何防止运行时崩溃?

c++ - 为类中定义的 typedef 定义 ostream operator<<

c++ - 为满足条件的类专门化 `std::hash`

c++ - 使用 '&'进行迭代时 'auto'符号有什么作用