C++ 标准节 ID,其中提到析构函数隐式不抛出
c++ standard section id where its mentioned that Destructors are implicitly no throw
我在某处读到,从 c++11 开始,析构函数被隐式声明为 noexcept(true)
.
从标准部分 12.4
没有 异常规范具有与 被隐式声明
但是在标准中我找不到一个部分,其中说析构函数是隐式noexcept(true)
的。任何人都可以指出我可以找到此信息的部分吗?
我相信
你正在寻找§15.4/14(强调我的):
继承构造函数 (12.9) 和隐式声明的特殊成员函数(条款 12)具有 异常规范。如果
f
是继承构造函数或隐式声明的默认构造函数,请复制 构造函数、移动构造函数、析构函数、复制赋值运算符或移动赋值运算符,其隐式 异常规范指定类型 IDT
当且仅当异常规范允许T
由f
的隐式定义直接调用的函数;f
允许所有异常,如果有的话,它直接起作用 调用允许所有异常,f 具有异常规范 noexcept(true) 如果每个函数都直接 调用不允许异常。[ 注意:因此f
具有例外规范noexcept(true)
如果它不调用其他函数。—尾注 ]
15.4/14 中描述了特殊成员的隐式异常规范是如何形成的。 不是很清楚,但基本上是说特殊成员只抛出基地的特殊成员和它调用的成员抛出的那些异常;这意味着 a) 如果没有碱基或成员,就不会有任何例外,b) 如果所有碱基和成员都没有抛出异常,就不会有任何例外。最终结果是析构函数noexcept(true)
,除非任何成员或基的析构函数不是。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 析构函数调用
- 为什么标准允许我在没有析构函数的情况下自由存储分配类
- C++ 标准节 ID,其中提到析构函数隐式不抛出
- 根据C++标准,显式调用构造函数和析构函数是否安全
- 标准::字符串析构函数中的奇怪错误
- 是否有任何标准的Visual Studio 2008插件可用于跟踪/记录C++项目的构造函数和析构函数调用
- 标准::交换中不需要的析构函数调用
- 多次调用同一对象的析构函数,其结果与标准中描述的不一样
- 为什么boost::thread的析构函数分离可接合线程,而不是像标准建议的那样调用terminate()