是否允许STL容器跳过调用allocator :: construct和allocator :: destroy,如果该对象是可以构造/可破坏的?

时间:2014-08-04 20:43:23

标签: c++ allocator

问题出在标题中。是否允许容器,或者即使对象是可以构造/可破坏的,也可以保证调用分配器的方法?

我确实试图搜索这个,但空手而归......但如果它重复,请告诉我。

1 个答案:

答案 0 :(得分:7)

§23.2.1[container.requirements.general] / p3:

  

对于受本子条款影响的组件,声明一个   allocator_type,存储在这些组件中的对象应为   使用allocator_traits<allocator_type>::construct构建   功能和破坏使用   allocator_traits<allocator_type>::destroy函数(20.7.8.2)。

没有规定允许在as-if规则之外省略这些调用。实际上,我在第23章中找不到单个“trivial”这个单词的实例,它指定了标准的库容器。

至于为什么他们指定类型特征如is_trivially_destructible,你必须挖掘原始提案文件的理由。它没有在C ++ 14标准中使用,但它目前在草案库基础知识TS中used to specify std::optional

~optional();
     
      
  • 效果:如果is_trivially_destructible<T>::value != true*this包含值,请致电val->T::~T()

  •   
  • 备注:如果is_trivially_destructible<T>::value == true那么这个析构函数应该是一个简单的析构函数。

  •