Code Review in C++: Was prüfen und wie man Feedback gibt
Code Review ist ein obligatorischer Schritt in der Softwareentwicklung, besonders in C++. Diese Sprache bietet enorme Freiheit, aber mit ihr kommt auch Verantwortung. Für Anfänger kann der Review-Prozess einschüchternd wirken, aber in Wirklichkeit ist er ein mächtiges Lernwerkzeug. In diesem Artikel besprechen wir, worauf man bei der Überprüfung von C++-Code achten sollte und wie man Feedback gibt, das hilfreich und nicht verletzend ist.
1. Grundlegende Korrektheit und Speichersicherheit
Das Erste, was in jedem C++-Code überprüft werden muss, ist die korrekte Speicherverwaltung. C++ hat keinen Garbage Collector, daher sind Fehler hier kritisch.
Was prüfen:
- Speicherlecks: Jedes
newmuss eindeletehaben, jedesnew[]eindelete[]. Besser sind intelligente Zeiger (std::unique_ptr,std::shared_ptr). - Array-Indexfehler: Verwendung von
std::vector::at()anstelle des Operators[]zur Fehlererkennung. - Hängende Zeiger: Zeiger, die auf bereits freigegebenen Speicher verweisen.
- Doppelte Freigabe: Erneutes
deletefür denselben Speicherblock.
// Schlecht: Manuelle Speicherverwaltungint* arr = new int[100];// ... Arbeit ...delete[] arr; // Leicht zu vergessen
// Gut: RAII verwendenstd::vector<int> arr(100);// Speicher wird automatisch freigegebenTipp für den Reviewer: Wenn Sie rohe Zeiger (int* ptr) oder manuelles new/delete sehen, ist das eine rote Flagge. Schlagen Sie die Verwendung von std::unique_ptr oder STL-Containern vor.
2. Verwendung der Standardbibliothek (STL)
C++20/23 bieten eine umfangreiche Standardbibliothek. Anfänger schreiben oft eigene Lösungen, wo fertige Funktionen existieren.
Checkliste:
- Container: Statt roher Arrays —
std::vector,std::array,std::map. - Algorithmen: Statt manueller Schleifen —
std::find,std::sort,std::copy. - Strings:
std::stringstattchar*. - Streams:
std::ifstream/std::ofstreamstatt C-fopen.
// Schlecht: Manuelle Suchebool found = false;for (int i = 0; i < vec.size(); ++i) { if (vec[i] == target) { found = true; break; }}
// Gut: STL-Algorithmusbool found = std::find(vec.begin(), vec.end(), target) != vec.end();Wie man Feedback gibt: Statt „Das ist falsch“, sagen Sie: „Tolle Logik! In der STL gibt es die fertige Funktion std::find, die dasselbe macht, aber kürzer und sicherer ist. Sollen wir sie ausprobieren?“.
3. Codestil, Namensgebung und Konstanz
Lesbarkeit des Codes ist die halbe Miete. Selbst perfekt funktionierender Code ist nutzlos, wenn er nicht wartbar ist.
Worauf achten:
- Namensgebung: Variablen —
snake_case(nach C++-Standard), Klassen —PascalCase. Vermeiden Sie einbuchstabige Namen (außerifür Zähler). - Konstanz: Parameter, die sich nicht ändern, sollten
constsein. Methoden, die das Objekt nicht ändern —const. - Formatierung: Einheitlicher Einrückungsstil (normalerweise 4 Leerzeichen), Leerzeichen um Operatoren.
- Magische Zahlen: Diese in Konstanten auslagern (
constexpr int MAX_SIZE = 100;).
// Schlecht: Unleserlichint a = 5;for(int i=0;i<10;i