我试图了解分配器,但我不完全了解某些标准别名的用途。特别是,我已经在 cppreference 中阅读了
propagate_on_container_copy_assignment
和 propagate_on_container_move_assignment
别名对容器分配操作的影响:
propagate_on_container_copy_assignment
如果(此成员派生自
std::true_type
并且)源容器和目标容器的分配器比较不相等,则复制分配必须使用旧分配器释放目标的内存,然后在复制之前使用新分配器分配它元素(和分配器)。
propagate_on_container_move_assignment
如果此成员未提供或未从
std::false_type
派生,并且源容器和目标容器的分配器比较不相等,则移动分配不能取得源内存的所有权,必须单独移动分配或移动构造元素,根据需要调整自己的内存大小。
阅读下面的注释并检查容器的一些实现,如果源分配器和目标分配器比较不相等,分配操作的成本似乎取决于这些别名的值。然后,如果分配器提供快速分配和释放操作但这些别名具有“错误”值,则成本可能非常高。
一般来说,在什么情况下,自定义分配器的设计者应该将一个或另一个别名标记为真或假?
注意:如果这些别名是真还是假,我不是在问设计者或容器应该做什么,而是在什么条件下分配器的设计者应该将它们声明为真或假。