4

所以我知道我可以使用 -Werror=... 将警告变成错误,但我想将以下警告变成错误:

“类 xxx 具有虚函数但非虚析构函数”

我知道你可以得到这个错误的唯一方法是打开过于讨厌的 -Weffc++ 标志。有没有办法(或者这个警告的 -Weffc++ 中的子标志是什么)只打印这个警告然后把它变成一个错误?

谢谢!

4

1 回答 1

7

-Wnon-virtual-dtor是由 开启的特定警告的名称-Weffc++。要将任何警告变为错误,请使用-Werror=.... 因此,如果警告是-Wspam,则将其变为错误-Werror=spam。因此,在这种情况下,您将使用-Werror=non-virtual-dtor.

但是,如果您使用的是 GCC 4.8 及更高版本,我不认为此警告特别有用。然后您可以访问上级-Wdelete-non-virtual-dtor

警告何时delete用于销毁具有虚函数和非虚析构函数的类的实例。如果基类没有虚拟析构函数,则通过指向基类的指针删除派生类的实例是不安全的。此警告由 启用-Wall

请注意,g++ -Wspam -Werror=spam这与g++ -Werror=spam. 将警告变为错误会自动打开该警告。

在相关的说明中,你不是唯一一个认为这-Weffc++有点过分热心的人。

于 2012-06-08T15:37:14.323 回答