STL容器元素销毁顺序

Ale*_*x B 22 c++ portability stl

ISO C++标准是否要求STL容器内任何类型的对象销毁顺序?

  • std::list/ std::vector/ std::map元素摧毁从开始或容器的末尾开始?
  • 我可以依赖于std::mapstd::pair内部将其元素存储在s中,因此一对中的键在其值之前被销毁(反之亦然)?

小智 22

  1. 标准中未指定.
  2. 是的,但这意味着密钥其关联值之后被销毁.


Ter*_*fey 5

  1. 不明
  2. 是的,您可以依赖std :: map将它的元素存储在std :: pairs中,但是我没有看到任何指定std :: pair的Key部分在Value部分之前被破坏的东西.

  • @RSamuel:ctor初始化程序中的顺序无关紧要,它是确定初始化顺序的成员声明顺序.(几乎相同的文本在当前标准中为20.2.2/2.) (3认同)
  • 标准要求*first*和*second*数据成员按顺序显示它们,如果需要该顺序,则还确定构造和销毁顺序. (2认同)
  • @RSK:20.2.2/1是一个更强的排序要求 - 初始化列表中的顺序不会影响,并且(不幸的是)不需要匹配由类成员声明指定的实际初始化顺序. (2认同)