Code Review en C++ : quoi vérifier et comment donner un retour
Le code review (revue de code) est une étape obligatoire du développement, surtout en C++. Ce langage offre une grande liberté, mais avec elle vient aussi la responsabilité. Pour les développeurs débutants, le processus de revue peut sembler intimidant, mais c'est en réalité un outil d'apprentissage puissant. Dans cet article, nous allons voir sur quoi se concentrer lors de la vérification du code C++ et comment donner un retour qui soit utile, et non blessant.
1. Exactitude de base et sécurité mémoire
La première chose à vérifier dans tout code C++ est la gestion correcte de la mémoire. Le C++ n'a pas de ramasse-miettes, donc les erreurs sont ici critiques.
Que vérifier :
- Fuites mémoire : Chaque
newdoit correspondre à undelete, chaquenew[]à undelete[]. Il est préférable d'utiliser des pointeurs intelligents (std::unique_ptr,std::shared_ptr). - Dépassement de limites de tableaux : Utilisation de
std::vector::at()au lieu de l'opérateur[]pour détecter les erreurs. - Pointeurs pendants : Pointeurs faisant référence à une mémoire déjà libérée.
- Double libération :
deleterépété pour un même bloc mémoire.
// Mauvais : gestion manuelle de la mémoireint* arr = new int[100];// ... travail ...delete[] arr; // Facile à oublier
// Bon : utilisation de RAIIstd::vector<int> arr(100);// La mémoire sera libérée automatiquementConseil pour le relecteur : Si vous voyez des pointeurs bruts (int* ptr) ou un new/delete manuel — c'est un drapeau rouge. Suggérez d'utiliser std::unique_ptr ou les conteneurs STL.
2. Utilisation de la bibliothèque standard (STL)
C++20/23 fournissent une bibliothèque standard riche. Les débutants réinventent souvent la roue là où des solutions toutes faites existent.
Liste de contrôle :
- Conteneurs : Au lieu de tableaux bruts —
std::vector,std::array,std::map. - Algorithmes : Au lieu de boucles manuelles —
std::find,std::sort,std::copy. - Chaînes :
std::stringau lieu dechar*. - Flux :
std::ifstream/std::ofstreamau lieu desfopendu C.
// Mauvais : recherche manuellebool found = false;for (int i = 0; i < vec.size(); ++i) { if (vec[i] == target) { found = true; break; }}
// Bon : algorithme STLbool found = std::find(vec.begin(), vec.end(), target) != vec.end();Comment donner un retour : Au lieu de « C'est faux », dites : « Excellente logique ! Dans la STL, il existe une fonction toute prête std::find qui fait la même chose, mais de manière plus courte et plus sûre. Essayons de l'utiliser ? ».
3. Style de code, nommage et constance
La lisibilité du code, c'est la moitié du succès. Même un code parfaitement fonctionnel est inutile s'il est impossible à maintenir.
Sur quoi se concentrer :
- Nommage : Variables —
snake_case(selon la norme C++), classes —PascalCase. Évitez les noms d'une seule lettre (saufipour les compteurs). - Constance : Les paramètres qui ne changent pas doivent être
const. Les méthodes qui ne modifient pas l'objet —const. - Formatage : Style d'indentation uniforme (généralement 4 espaces), espaces autour des opérateurs.
- Nombres magiques : Extrayez-les dans des constantes (
constexpr int MAX_SIZE = 100;).
// Mauvais : illisibleint a = 5;for(int i=0;i<10;i