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 に答える