Code Review em C++: o que verificar e como dar feedback
Code review (revisão de código) é uma etapa obrigatória do desenvolvimento, especialmente em C++. Esta linguagem oferece enorme liberdade, mas junto com ela vem a responsabilidade. Para desenvolvedores iniciantes, o processo de revisão pode parecer assustador, mas na verdade é uma ferramenta poderosa de aprendizado. Neste artigo, vamos abordar o que observar ao verificar código C++ e como dar feedback para que seja útil, e não ofensivo.
1. Correção básica e segurança de memória
A primeira coisa a verificar em qualquer código C++ é a correção no gerenciamento de memória. C++ não possui coletor de lixo, portanto os erros aqui são críticos.
O que verificar:
- Vazamentos de memória: Cada
newdeve ter umdeletecorrespondente, cadanew[]deve ter umdelete[]. É melhor usar ponteiros inteligentes (std::unique_ptr,std::shared_ptr). - Acesso fora dos limites de arrays: Usar
std::vector::at()em vez do operador[]para capturar erros. - Ponteiros pendentes: Ponteiros que referenciam memória já liberada.
- Dupla liberação:
deleterepetido para o mesmo bloco de memória.
// Ruim: gerenciamento manual de memóriaint* arr = new int[100];// ... trabalho ...delete[] arr; // Fácil de esquecer
// Bom: usando RAIIstd::vector<int> arr(100);// A memória será liberada automaticamenteDica para o revisor: Se vir ponteiros brutos (int* ptr) ou new/delete manuais — isso é um sinal de alerta. Sugira usar std::unique_ptr ou contêineres STL.
2. Uso da biblioteca padrão (STL)
C++20/23 fornece uma biblioteca padrão rica. Iniciantes frequentemente reinventam a roda onde poderiam usar soluções prontas.
Checklist:
- Contêineres: Em vez de arrays brutos —
std::vector,std::array,std::map. - Algoritmos: Em vez de loops manuais —
std::find,std::sort,std::copy. - Strings:
std::stringem vez dechar*. - Fluxos:
std::ifstream/std::ofstreamem vez defopendo C.
// Ruim: busca manualbool found = false;for (int i = 0; i < vec.size(); ++i) { if (vec[i] == target) { found = true; break; }}
// Bom: algoritmo STLbool found = std::find(vec.begin(), vec.end(), target) != vec.end();Como dar feedback: Em vez de "Isso está errado", diga: "Ótima lógica! A STL tem a função pronta std::find que faz o mesmo, mas de forma mais curta e segura. Vamos tentar usá-la?".
3. Estilo de código, nomenclatura e constância
Legibilidade do código é metade do sucesso. Mesmo um código perfeitamente funcional é inútil se não puder ser mantido.
O que observar:
- Nomenclatura: Variáveis —
snake_case(padrão C++), classes —PascalCase. Evite nomes de uma letra (excetoipara contadores). - Constância: Parâmetros que não mudam devem ser
const. Métodos que não alteram o objeto —const. - Formatação: Estilo único de indentação (geralmente 4 espaços), espaços ao redor de operadores.
- Números mágicos: Coloque-os em constantes (
constexpr int MAX_SIZE = 100;).
// Ruim: ilegívelint a = 5;for(int i=0;i<10;i