为什么 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>&>
有状态分配器应该在复制时保留其状态。
例如,当您为地图传递一个分配器时,它会反弹到另一个分配器类型,但仍保留您传递给它的状态。
或者两个不同的容器共享分配器状态,但它们具有不同的分配器实例。
通常,您的分配器具有指向您的状态的指针。将指向您的状态的指针作为分配器构造函数的参数,并将其作为容器构造函数的参数传递。
我正在使用自定义分配器,它内部有一个简单的小状态。当我将它与 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>&>
有状态分配器应该在复制时保留其状态。
例如,当您为地图传递一个分配器时,它会反弹到另一个分配器类型,但仍保留您传递给它的状态。
或者两个不同的容器共享分配器状态,但它们具有不同的分配器实例。
通常,您的分配器具有指向您的状态的指针。将指向您的状态的指针作为分配器构造函数的参数,并将其作为容器构造函数的参数传递。