propagate_on_container_copy_assignment 和 propagate_on_container_move_assignment 应该什么时候为真?

问题描述 投票:0回答:0

我试图了解分配器,但我不完全了解某些标准别名的用途。特别是,我已经在 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
派生,并且源容器和目标容器的分配器比较不相等,则移动分配不能取得源内存的所有权,必须单独移动分配或移动构造元素,根据需要调整自己的内存大小。

阅读下面的注释并检查容器的一些实现,如果源分配器和目标分配器比较不相等,分配操作的成本似乎取决于这些别名的值。然后,如果分配器提供快速分配和释放操作但这些别名具有“错误”值,则成本可能非常高。

一般来说,在什么情况下,自定义分配器的设计者应该将一个或另一个别名标记为真或假?

注意:如果这些别名是真还是假,我不是在问设计者或容器应该做什么,而是在什么条件下分配器的设计者应该将它们声明为真或假。

c++ c++11 allocator
© www.soinside.com 2019 - 2024. All rights reserved.