More Exceptional C++
More Exceptional C++
Resumo:
Introdução
O livro «More Exceptional C++» (2001) é a continuação da famosa coleção de problemas e soluções de Herb Sutter, um dos principais especialistas na linguagem C++. Se o primeiro livro «Exceptional C++» estabeleceu a base para uma compreensão profunda de exceções, gerenciamento de memória e design de classes, a segunda parte eleva o nível ainda mais. Aqui, o autor propõe 40 novos problemas (Items), divididos em seções temáticas, que abrangem tanto problemas clássicos (segurança de exceções, RAII, expressões idiomáticas) quanto tópicos mais avançados: otimização de STL, nuances de herança, templates e até mesmo questões de multithreading (no contexto de C++98/03). O livro é escrito no formato "pergunta-resposta": primeiro é apresentado um problema, depois é feita uma análise detalhada com código, análise e conclusões. Não é um tutorial para iniciantes — é uma coleção de quebra-cabeças para aqueles que já escrevem em C++ com confiança e desejam evitar armadilhas comuns.
Sobre o que é o livro
O tema principal é a segurança de exceções e o gerenciamento correto de recursos. Sutter analisa consistentemente como escrever código que não "vaze" quando ocorrem exceções, como usar a expressão idiomática RAII (Resource Acquisition Is Initialization) e como projetar classes resistentes à execução parcial de operações. O livro também aborda:
- Regras de sobrecarga de operadores (especialmente operator= e operator[]);
- Nuances do trabalho com contêineres STL (std::vector, std::list, std::map);
- Expressões idiomáticas "pimpl" (pointer to implementation) e "copy-and-swap";
- Problemas de herança múltipla e classes base virtuais;
- Otimização de código usando templates e estratégias (policy-based design);
- Tratamento de erros em construtores e destrutores.
Cada capítulo contém exemplos de código específicos que podem ser aplicados imediatamente em projetos reais. Sutter não apenas fornece soluções prontas, mas também explica por que outras abordagens são errôneas e quais consequências podem surgir.
Para quem é este livro
O livro é voltado para desenvolvedores C++ experientes que já estão familiarizados com sintaxe, classes, herança e templates. Será útil para:
- Programadores que trabalham em sistemas de alta confiabilidade (finanças, telecomunicações, sistemas embarcados);
- Desenvolvedores de bibliotecas e frameworks, onde a estabilidade da API é importante;
- Estudantes de graduação e pós-graduação que estudam conceitos avançados de C++;
- Todos que desejam aprimorar habilidades de depuração e refatoração de código complexo.
Para iniciantes, o livro parecerá difícil — é melhor começar com «Exceptional C++» ou «Effective C++» de Scott Meyers.
O que o leitor aprenderá
Após a leitura, você será capaz de:
- Garantir segurança de exceções em três níveis (basic, strong, nothrow);
- Implementar corretamente operadores de atribuição e cópia;
- Evitar vazamentos de memória e recursos em construtores;
- Otimizar o uso de contêineres STL (por exemplo, evitar cópias desnecessárias);
- Aplicar a expressão idiomática "copy-and-swap" para escrever um operator= confiável;
- Entender quando usar herança virtual e quando usar composição;
- Projetar classes considerando possíveis exceções em destrutores.
Pontos fortes
A principal vantagem do livro é a orientação prática. Cada problema é acompanhado de código real que pode ser compilado e testado. Sutter não tem medo de mostrar opções incorretas e explicar por que elas são perigosas. O segundo ponto positivo é a estrutura: o livro é dividido em pequenos capítulos (2–5 páginas), permitindo que seja lido em partes, retornando a tópicos complexos. O terceiro é a ênfase na segurança de exceções, que permanece relevante mesmo após 20 anos: o C++ moderno (C++11/14/17/20) adicionou novas ferramentas (move-semântica, unique_ptr, optional), mas os princípios básicos apresentados por Sutter não ficaram desatualizados. Finalmente, o estilo do autor — vivo, com uma pitada de humor e autoironia — torna
Recommendations
Java para data science: dos fundamentos às soluções industriais
Programação Funcional em C# (.NET)
Testando aplicações Go (Golang): de testes unitários à produção
C++ para Data Science: de dados brutos a algoritmos de produção
Testes de Aplicações JavaScript
TypeScript: Modern JavaScript Development