【发布时间】:2014-08-25 08:56:30
【问题描述】:
直到 C++03 的析构函数通常被允许抛出任意异常。
然而,在 C++11 中,所有没有显式异常规范的析构函数默认变为 noexcept。
这可以用 noexcept(false) 覆盖,但此代码不会被 C++11 之前的编译器接受。
一种解决方案是通过检查特定于编译器的#defines 来检测对noexcept(false) 的需求,但这仍然限制了此类代码对一组已知编译器的适用性。
在С++11和C++03中是否有任何可移植的方式允许从析构函数中抛出任意异常?
【问题讨论】:
-
可移植的方式是不从析构函数中抛出异常,无论是 C++03 还是 C++11。 Read this 讨论为什么可以抛出的析构函数是一个坏主意。还有一个GotW article也谈到了它。
标签: c++ destructor noexcept