gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:22 25 4
gpt4 key购买 nike

问题在标题中。容器是否允许这样做,或者分配器的方法是否保证被调用,即使对象是微不足道的可构造/可破坏的?

我确实尝试搜索此内容,但空手而归...但如果重复,请告诉我。

最佳答案

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

For the components affected by this subclause that declare an allocator_type, objects stored in these components shall be constructed using the allocator_traits<allocator_type>::construct function and destroyed using the allocator_traits<allocator_type>::destroy function (20.7.8.2).

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

至于为什么他们指定像 is_trivially_destructible 这样的类型特征,您必须找出原始提案文件以了解基本原理。它未在 C++14 标准中使用,但目前为 used to specify std::optional 在 Library Fundamentals TS 草案中:

~optional();
  • Effects: If is_trivially_destructible<T>::value != true and *this contains a value, calls val->T::~T().

  • Remarks: If is_trivially_destructible<T>::value == true then this destructor shall be a trivial destructor.

关于c++ - 如果对象是普通可构造/可破坏的,是否允许 STL 容器跳过调用 allocator::construct 和 allocator::destroy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com