问题出在标题中。是否允许容器,或者即使对象是可以构造/可破坏的,也可以保证调用分配器的方法?
我确实试图搜索这个,但空手而归......但如果它重复,请告诉我。
答案 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
那么这个析构函数应该是一个简单的析构函数。