为什么 clear() 函数是 noexcept 而析构函数不是?

Why the clear() function is noexcept while the destructor is not?

提问人:LoS 提问时间:10/6/2023 最后编辑:LoS 更新时间:10/6/2023 访问量:122

问:

我注意到,在分配器感知容器接口中,标准要求成员函数是,而析构函数不是。此外,在某些基于节点的容器(例如 和 )的情况下,它似乎存在差异,因为成员函数执行与析构函数相同的操作。这种差异有什么原因吗?clear()noexceptstd::forward_liststd::setclear()

C++ 11 C+ +-标准库 noexcept

评论

2赞 HolyBlackCat 10/6/2023
你是如何确定这些析构函数不是例外的?你知道他们默认为,除非你使用 ?noexceptnoexcept(false)
2赞 HolyBlackCat 10/6/2023
这里还有 [res.on.exception.handling]/3,它声称所有标准库析构函数都是 .noexcept
2赞 BoP 10/6/2023
它变得更好了,因为向量是没有例外的,但不是。clear()erase(begin(), end())
0赞 Eljay 10/6/2023
您是否尝试过一些具有抛出析构函数的对象的代码,以及它们如何使用?clear()

答:

7赞 Mestkon 10/6/2023 #1

析构函数是隐式的,除非任何成员变量析构函数或基类析构函数已用 标记,或者析构函数本身显式标记为 。noexceptnoexcept(false)noexcept(false)