标准规定含析构函数的类不应平凡可析构?以std::latch为例
结论
正确答案是 1. 实现自由,三大主流标准库的实现均符合C++标准要求。
原因说明
- C++标准中给出的
std::latch类声明属于接口概要,仅用于说明类对外暴露的公开接口,并非强制要求实现完全照搬的代码模板。 - 标准未对
std::latch的析构函数规定任何必须执行的用户可见副作用(例如资源释放、同步操作等),仅要求其生命周期结束时行为正常。因此实现完全可以选择将std::latch的析构函数实现为平凡析构,此时std::is_trivially_destructible_v<std::latch>取值为true,完全符合标准要求。 - 除非标准明确要求某类型必须是平凡可析构/非平凡可析构,否则该类型的平凡可析构属性属于实现自由的范畴,标准不做强制约束。
其他选项排除
- 选项2不成立:主流实现没有违反标准要求,不存在缺陷。
- 选项3不成立:标准给出的接口概要写法没有问题,概要与实现的细节差异属于标准允许的范畴。
内容的提问来源于stack exchange,提问作者Alex Guteniev
相关产品推荐
相关产品推荐

