【发布时间】:2016-11-07 09:08:44
【问题描述】:
到目前为止,我从未收到过 C++ 编译器发出的单一警告,但现在 VS 2015 编译器似乎突然开始抱怨这个问题。
似乎 C++11 隐式地将每个析构函数标记为 nothrow https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4297)&rd=true
这是为什么呢?这可能是一个坏主意,但我想了解为什么?如果它本质上不是坏的,有没有办法覆盖它,使析构函数不是一个 nothrow?
附:我知道异常可能是邪恶的,但有时它们很有用,尤其是在从我的应用用户那里生成崩溃报告时。
【问题讨论】:
-
从析构函数中抛出是一个非常糟糕的主意。
-
想解释一下为什么?
-
我看不到当前的答案如何真正解释为什么
noexcept被隐式添加到析构函数中。它冒着在晦涩的情况下触发std::terminate的风险,与在所有情况下肯定触发std::terminate的风险进行交易,而且没有强制堆栈展开作为奖励...... -
用一个间歇性的 bug 换成一个可重现的 bug 对我来说似乎很划算。
标签: c++