std :: map是通过引用按值引用分配器还是纯粹作为类型使用它?

And*_*zos 2 c++ dictionary allocator c++17

当a std::map将Allocator作为构造函数中的参数时,它通过引用获取其类模板参数中的类型:

explicit map(const Allocator& alloc);
Run Code Online (Sandbox Code Playgroud)

它是将此引用存储在对象中,还是采用副本(按值存储),还是不执行任何操作,仅将模板参数用作类型?你是怎么决定的?

Nat*_*ica 5

分配器被复制到地图中. std::map没有说明它做了什么,所以我们回到[container.requirements.general]/8,它指出:

[...]这些容器类型的所有其他构造函数都采用const allocator_type&argument.[注意:如果构造函数的调用使用可选allocator参数的默认值,则Allocator类型必须支持值初始化.- 结束注释] 此分配器的副本用于在每个容器对象的生命周期内或直到替换分配器时由这些构造函数和所有成员函数执行的任何内存分配和元素构造.[...]

强调我的