Frage

Die Antworten auf die folgenden Fragen beschreiben die empfohlene Verwendung von static_cast, dynamic_cast und reinterpret_cast in C ++:

Wann sollte static_cast, dynamic_cast, const_cast und reinterpret_cast verwendet werden?

Kennen Sie irgendwelche Werkzeuge, die verwendet werden können, Missbrauch dieser Arten von Guss zu erkennen? Würde ein statische Analyse-Tool wie PC-Lint oder Coverity Static Analysis tun?

Der besondere Fall, dass diese Frage aufgefordert, war die unangemessene Verwendung von static_cast einen Zeiger auf niedergeschlagenen, die die Compiler nicht zustande warnen. Ich mag diesen Fall erkennen, mit einem Werkzeug, und nicht davon ausgehen, dass die Entwickler nie diesen Fehler machen.

War es hilfreich?

Lösung

Da gibt es keine zuverlässige Möglichkeit, zu sagen, was den Zeiger auf zum Zeitpunkt der Kompilierung geben, das ist ein ziemlich schwieriges Problem zu fangen bei der Kompilierung.

Die einfachste Methode ist es, den Fang zu Laufzeit zu tun, einen Makro „safe_cast“ verwendet, die kompiliert zu einem dynamic_cast mit einer Assertion in debuggen und einem static_cast in Release.

Nun, beim Debuggen, wenn die Besetzung nicht geeignet ist, wird die dynamische Umwandlung NULL zurück, und assert. Es gibt auch keinen Overhead bei der Freigabe.

Andere Tipps

Visual Studio hat Warnungen für einige von ihnen. C4946, zum Beispiel. Sie sind meist standardmäßig though.

ausgeschaltet

http://msdn.microsoft.com/en-us/library /23k5d385.aspx

Boost-Angebote polymorphic_pointer_downcast () und polymorphic_downcast () Funktionen, die wie static_cast wirken aber behaupten (in der Regel nur in Debug-Builds), wenn das Äquivalent dynamic_cast ausfällt.

Siehe http://www.boost.org/doc /libs/1_61_0/libs/conversion/cast.htm .

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