📊 Capítulo 10: Smart Pointers & Gestão de Recursos
Especialização em Sistemas com C++
🗺️ Árvore de Escolha de Smart Pointers em C++ Moderno
flowchart TD
Q1{"O recurso possui posse EXCLUSIVA (um único dono)?"}
Q1 -- "SIM (Padrão 95% das vezes!)" --> UP["std::unique_ptr<T> (std::make_unique)\n(Zero overhead de memória! Mesmo tamanho de um ponteiro bruto! Não copiável, apenas movível) ⚡"]
Q1 -- "NÃO (Posse compartilhada entre múltiplos subsistemas)" --> SP["std::shared_ptr<T> (std::make_shared)\n(Gerencia Bloco de Controle com Reference Counting atômico thread-safe)"]
SP --> Q2{"Existe risco de referências circulares (A aponta para B e B para A)?"}
Q2 -- "SIM" --> WP["std::weak_ptr<T>\n(Observador que não incrementa a contagem de referências / Quebra ciclos de vazamento!) 🛡️"]
style Q1 fill:#ede7f6,stroke:#512da8,stroke-width:2px
style UP fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style SP fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style Q2 fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style WP fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: A Morte do new e delete Explícitos
-
Em C++ moderno, você quase nunca deve escrever a palavra
deletemanualmente. - Use
std::make_unique<T>()estd::make_shared<T>(). Eles garantem segurança contra vazamento de memória mesmo se o construtor disparar exceção antes da atribuição!
🎯 Slide 2: std::unique_ptr (Posse Exclusiva)
auto motor = std::make_unique<MotorV8>(500);
// std::unique_ptr<MotorV8> motor2 = motor; // ERRO DE COMPILAÇÃO! Proíbe cópia! 🛡️
// Transferência de posse explícita:
auto motor2 = std::move(motor); // Agora motor2 é o dono, e motor vira nullptr!
🎯 Slide 3: std::weak_ptr para Quebrar Ciclos
- Se dois objetos compartilhados guardarem
std::shared_ptrum para o outro, o contador de referências nunca chegará a zero e a memória nunca será liberada! Usestd::weak_ptrpara quebrar referências filhas para os pais.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim