11

もちろん、警告を処理する必要がありますが、VC ++ C4150(不完全な型へのポインターの削除)が警告のみであるのはなぜですか?

4

3 に答える 3

12

標準はそれが合法であると言っているので危険ですが:5.3.5

削除されるオブジェクトの削除時点でのクラスタイプが不完全であり、完全なクラスに重要なデストラクタまたは割り当て解除関数がある場合、動作は定義されていません。

于 2009-08-13T13:29:29.567 に答える
5

前方宣言の結果としてこの警告が表示されます。したがって、コンパイラはそれが構造体/クラスであることを認識していますが、デストラクタの呼び出しについてはわかりません。

最も可能性のある警告の感覚は、msvcによるコード分析の2番目のパスに関係しています。後者のクラスが解決されると、コンパイラはデストラクタが存在するかどうかを判断できます。

于 2009-08-13T11:19:56.443 に答える
2

多くの場合、悪い考えですが、C++では合法です。

大まかに言って、警告レベル1は「驚かれるかもしれませんが、そこで言ったことを無視しました」タイプであり、生成されたコードが正しくなく、クラッシュしやすいいくつかの選択されたステートメントです。

したがって、WL 2は適切です。これは合法であり、多くのシナリオで不完全なタイプを削除してもまったく問題がないためです。

もちろん、その推論は単なる知識に基づいた推測です。たぶん、マイクロソフトはこの警告レベルを割り当てるためにサイコロを振った。

于 2009-08-13T11:47:54.083 に答える