シリアル化する必要がある 2 つのクラス (私の質問に関連) を持つプロジェクトに取り組んでいます。しばらくの間、クラスの 1 つが正常にコンパイルされ、もう 1 つのクラスが次の警告でコンパイルされました。
...\boost\mpl\print.hpp(51): warning C4308: negative integral constant converted to unsigned type
両方とも、Boost クラス エクスポータを使用してクラスを登録していたので、後で次のように、それらのインスタンスへの基本クラス ポインタを安全にシリアライズできました。
BOOST_CLASS_EXPORT_GUID(ClassName, "ClassName")
そのため、2 つのクラスの違いをゆっくりと解消したところ、警告の原因は次のとおりであることがわかりました。静かにコンパイルされたクラスには仮想デストラクタがありました。これは、独自のデストラクタを必要とする可能性がある他のクラスから継承させることを計画していたためです。
今のところ、他のクラスにも仮想デストラクタを与えただけですが、継承するつもりはないので、これは奇妙に思えます。
私の質問は、クラスに仮想デストラクタを与えるとこの警告が「修正」されるのはなぜですか?また、警告は実際にはどういう意味ですか? BOOST_CLASS_EXPORT_GUID マクロの一部が、自分のクラスなどから継承するクラスを作成していますか?