明确要求STL容器元素是(noexcept)可破坏的吗?

时间:2015-03-27 15:07:33

标签: c++ c++11 stl

C ++ 11(和C ++ 14)STL容器具有noexcept析构函数和clear()成员函数。

这意味着元素也应该具有noexcept析构函数,或者至少存储在容器中的实际元素在销毁时不应抛出任何异常 - 或者更准确地说,相应的allocator_traits<Allocator>::destroy调用应该不要扔。

这是否在标准的任何地方指定为要求(明确或暗示另一个明确要求)?如果没有,为什么?

我知道is_nothrow_constructible需要一个noexcept析构函数,但仅is_constructible不需要,并且容器需求是根据概念而不是类型特征模板指定的。

1 个答案:

答案 0 :(得分:7)

  

17.6.4.8/1 在某些情况下(替换函数,处理函数,用于实例化标准的类型的操作)   库模板组件),C ++标准库依赖于C ++程序提供的组件。   如果这些组件不符合他们的要求,标准对此没有要求   实施

     

17.6.4.8/2 特别是,在以下情况下效果未定义:

     

...

     
      
  • 如果有任何替换函数或处理函数或析构函数通过异常退出,除非特别允许   适用必需行为:段落。
  •