CodeSOD : Un problème de lint ... Note

CodeSOD : Un problème de lint unique

Le code C++ fourni démontre une mise en œuvre défectueuse du patron de conception singleton utilisé pour les fonctions utilitaires. Une classe CUtilities est déclarée avec des méthodes utilitaires et un pointeur global, g_Utility. Le constructeur de CUtilities initialise g_Utility pour pointer vers l'instance actuelle. Cependant, ce setup ne prévient pas la création de plusieurs instances, ce qui entraîne des fuites de mémoire lorsque de nouvelles instances écrasent le pointeur. Une classe d'initialisation, CUtilityInit, a été utilisée pour créer une instance de CUtilities, appelant ainsi son constructeur. Le problème survient parce que le membre CUtilities à l'intérieur de CUtilityInit a été marqué comme inutilisé par un linter. Une employée, Olivia, a supprimé ce membre inutilisé. Cette action a cassé le programme car le pointeur global g_Utility n'a jamais été initialisé. La correction appropriée a consisté à initialiser directement g_Utility avec une instance au démarrage, plutôt que de compter sur l'approche singleton défectueuse. Le texte souligne que les singletons sont généralement une mauvaise pratique et que les mises en œuvre pauvres créent des problèmes significatifs. Les développeurs sont conseillés d'éviter d'utiliser des patrons de conception simplement pour le plaisir de les utiliser.