¿Hay herramientas de C ++ que detectan el mal uso de static_cast, moldeado dinámico, y reinterpret_cast?

StackOverflow https://stackoverflow.com/questions/2465964

Pregunta

Las respuestas a la siguiente pregunta describen el uso recomendado de static_cast, dynamic_cast y reinterpret_cast en C ++:

Cuando debe static_cast, dynamic_cast, const_cast y reinterpret_cast ser utilizado?

¿Sabe usted de cualquier herramientas que se pueden utilizar para detectar el mal uso de este tipo de reparto? Podría ser una herramienta de análisis estático como PC-Lint o análisis estático de Coverity hacer esto?

El caso particular que llevó a esta pregunta fue el uso inadecuado de static_cast al abatido un puntero, que el compilador no advierte acerca. Me gustaría para detectar este caso utilizando una herramienta, y no asumir que los desarrolladores nunca cometer este error.

¿Fue útil?

Solución

Dado que no hay manera confiable de saber qué tipo es el puntero apunta a en tiempo de compilación, este es un problema muy difícil de atrapar en tiempo de compilación.

El método más sencillo es hacer la captura en tiempo de ejecución, utilizando una macro "safe_cast", que compila a un moldeado dinámico con una aserción en depuración, y una static_cast en la liberación.

Ahora, durante la depuración, si el yeso es inapropiada, el elenco dinámico devolverá un valor nulo, y afirman. También hay ninguna sobrecarga durante la liberación.

Otros consejos

Visual Studio tiene advertencias de algunos de éstos. C4946, por ejemplo. En su mayoría son desactivados por defecto sin embargo.

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

Boost ofrece polymorphic_pointer_downcast () y polymorphic_downcast (), las cuales actúan como static_cast sino que valer (por lo general sólo en versiones de depuración) si falla el moldeado dinámico equivalente.

http://www.boost.org/doc /libs/1_61_0/libs/conversion/cast.htm para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top