Y a-t-il des outils C ++ qui détectent une mauvaise utilisation de static_cast, dynamic_cast et reinterpret_cast?

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

Question

Les réponses à la question suivante décrivent l'utilisation recommandée de static_cast, dynamic_cast et reinterpret_cast en C ++:

Quand faut-static_cast, dynamic_cast, const_cast et reinterpret_cast utiliser?

Connaissez-vous des outils qui peuvent être utilisés pour détecter l'utilisation abusive de ce genre de casting? Est-ce qu'un outil d'analyse statique comme PC-Lint ou Coverity Static Analysis faire?

Le cas particulier qui a poussé cette question était l'utilisation inappropriée de static_cast pour downcaster un pointeur, que le compilateur ne prévient pas. Je voudrais détecter ce cas à l'aide d'un outil, et ne pas présumer que les développeurs ne feront jamais cette erreur.

Était-ce utile?

La solution

Étant donné qu'il n'y a aucun moyen fiable de dire quel type de points de pointeur au moment de la compilation, c'est un problème assez difficile à attraper au moment de la compilation.

La méthode la plus simple est de faire les prises lors de l'exécution, en utilisant une macro « safe_cast » qui compile un dynamic_cast avec une assertion dans le débogage, et un static_cast dans la version.

Maintenant, pendant le débogage, si le casting est inappropriée, la distribution dynamique renvoie null, et faire valoir. Il y a aussi pas de frais généraux lors de la libération.

Autres conseils

Visual Studio a des avertissements pour certains d'entre eux. C4946, par exemple. Ils sont la plupart du temps rebutés par défaut cependant.

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

Boost offre des fonctions polymorphic_pointer_downcast () et polymorphic_downcast (), qui agissent comme static_cast mais affirmera (généralement que dans les versions debug) si le dynamic_cast équivalent échoue.

Voir http://www.boost.org/doc /libs/1_61_0/libs/conversion/cast.htm pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top