Frage

Natürlich Warnung muss behandelt werden, aber Warum ist VC ++ C4150 (Streichung des Zeigers auf einen unvollständigen Typ) nur eine Warnung?

War es hilfreich?

Lösung

Weil Standard sagt, es ist legal, obwohl gefährlich: 5.3.5

  

Wenn das Objekt gelöscht hat   unvollständiger Klassentyp an der Stelle der   Löschen und die komplette Klasse hat eine   nicht-triviale destructor oder   Freigabe-Funktion ist das Verhalten   nicht definiert.

Andere Tipps

Sie erhalten diese Warnung als Ergebnis der Vorwärtsdeklaration. So Compiler hat erkannt, dass es Struktur / Klasse ist, aber nicht sicher Aufruf von destructor.

Sense of Warnung möglichst mit zweitem Durchlauf des Codes betroffen analysiert msvc. Wenn letztere Klasse aufgelöst wird Compiler kann eine Entscheidung treffen, wenn destructor vorhanden ist.

Es ist legal in C ++, obwohl oft genug eine schlechte Idee.

Grob Warnstufe 1 sind der „Sie überrascht sein könnte, aber ich ignorierte, was Sie sagte, es gebe“ Typ, und einige ausgewählte Aussagen, wo der erzeugte Code sehr wahrscheinlich falsch und absturzanfällig ist.

So WL 2 ist angemessen, da es legal ist und in vielen Szenarien völlig ok einen unvollständigen Typen zu löschen.

Natürlich ist diese Argumentation nur eine Vermutung. Vielleicht rollte Microsoft die Würfel diese Warnstufe assigne.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top