在C ++中宽松抛出说明符

我收到一个错误,说:

错误:'虚拟CPLAT :: CP_Window ::〜CP_Window()'的宽松抛出说明符'

在析构函数中,我从来没有听说过这个,一些Google搜索表示这可能是一个GCC 4问题,我不知道如何解决,因为我需要GCC 4来构建一个通用二进制文件。

我的环境:OS X 10.6,XCode 3.2.2,GCC 4构建通用二进制文件。

什么是问题?


我认为CPLAT有一个基类? 我还猜测你没有在CPLAT的析构函数中加上一个throw说明符?

您可以在函数签名的末尾放置throw(X) (其中X是逗号分隔的异常列表),以指示允许抛出哪些异常。 如果你把throw()作为throw说明符,那么它将表明不能从该函数抛出异常。 使用析构函数执行此操作很常见,因为您不希望析构函数抛出异常。

覆盖具有throw说明符的函数的类不能具有比被覆盖的函数更宽松的说明符(列出更多的异常),因为这将表明派生类的函数可能违反基类函数的throw说明符。 没有throw说明符意味着可以从该函数抛出任何异常,所以它可以像获得的一样宽松。

很可能,您需要将throw()添加到CPLAT析构函数的函数签名的末尾。

编辑:顺便说一句,我应该补充说,你可能不想使用throw说明符(除了throw()在析构函数上),而没有真正知道这就是你想要的。 与Java的检查异常不同,它们不会在编译时被捕获,而是会在运行时终止程序(如果违反)。 所以,除非你知道你在做什么,否则最好不要使用它们。


http://www.agapow.net/programming/cpp/looser-throw-specifier

在〜CP_Window()的声明之后放了throw()吗?

谷歌搜索的顶部链接“宽松投掷说明符”顺便说一句。

链接地址: http://www.djcxy.com/p/27915.html

上一篇: looser throw specifier for in C++

下一篇: virtual methods in C++ without editing production code?