考虑一下std::latch [thread.latch.class]
namespace std {
class latch {
public:
static constexpr ptrdiff_t max() noexcept;
constexpr explicit latch(ptrdiff_t expected);
~latch();
latch(const latch&) = delete;
latch& operator=(const latch&) = delete;
void count_down(ptrdiff_t update = 1);
bool try_wait() const noexcept;
void wait() const;
void arrive_and_wait(ptrdiff_t update = 1);
private:
ptrdiff_t counter; // exposition only
};
}注意,析构函数存在。这意味着这应适用于:
static_assert(std::is_trivially_destructible_v<std::latch> == false);然而,它与实现(MSVC、libstdc++、libc++)相反:https://godbolt.org/z/6s8173zTc
这是:
is_trivially_destructible_v可以是true或false)std::latch的非平凡析构函数)std::latch )发布于 2021-09-26 12:50:05
这是执行自由。C++标准定义了类,类的实现达到了实现。
在某些类中,标准显式地强制执行一个微不足道的析构函数。例如,如果一个现有类是可销毁的,那么它的std::optional也是必须是可销毁的。这一点需要说清楚。
因此,除非某个地方有一个明确的语句,说明类是可构造的,或者不是可构造的,否则这取决于实现(在可能的情况下)。
查看gcc的头文件:它不仅声明,而且显式定义析构函数:
~latch() = default;在此基础上,编译器可以计算出整件事情都是微不足道的可销毁的。
https://stackoverflow.com/questions/69334861
复制相似问题