C++
允许throw
任何类型的对象。从 exception
到 string
甚至 int
。
但是除了exception
之外,我从未见过任何throw
ing 的真实世界应用。
我的问题是,throw
非exception
对象的应用是什么?
最佳答案
从实用性的角度来看,几乎1 没有用于抛出string
、int
或其他任何东西的应用程序t 派生自 std::exception
。
这并不是因为没有迹象表明这样做,而是因为有一些禁忌症表明您不应该这样做。
您不想抛出任何不是从 std::exception
派生的东西的主要原因有两个:
- 异常安全。例如,如果您抛出一个
std::string
并且该string
的构造或拷贝会引发另一个异常,terminate
将被调用,您的进程将不复存在。您将永远没有机会捕获
std::string
。 - 可用性。 抛出
std::exception
的衍生物使得以通用方式catch (const std::exception&)
成为可能。如果您抛出其他东西,您将需要一个catch
来应对这种情况。
可以找到关于异常的很好的讨论 here .
1 几乎没有应用 [...]: 每条规则都有异常(exception),但即使承认这一点,我也从未见过合法 排除抛出 std::exception
的衍生物。
关于c++ - 抛出非异常对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559355/