📊 Capítulo 09: Classes, Destrutores & RAII
Especialização em Sistemas com C++
🗺️ O Padrão Ouro do C++: Resource Acquisition Is Initialization (RAII)
sequenceDiagram
autonumber
actor F as Função (void processarArquivo())
participant OBJ as Objeto Local na Stack (ArquivoRAII arq)
participant RES as Recurso Externo (File Descriptor / Handle do SO)
F->>OBJ: Instancia arq("dados.bin")
OBJ->>RES: Construtor abre o recurso no SO
Note over F,OBJ: Executa processamento... Ocorre uma exceção inesperada! 💥
Note over F: O Stack Unwinding é disparado pela CPU:
F->>OBJ: Destrutor ~ArquivoRAII() é chamado AUTOMATICAMENTE!
OBJ->>RES: Fecha o descritor e libera a memória do SO! 🛡️
Note over F,RES: Zero vazamento de recursos! Garantia de 100% à prova de exceções!
🎯 Slide 1: O Que é RAII?
-
Vincular o tempo de vida de recursos de baixo nível (memória, sockets de rede, descritores de arquivo, mutexes) ao tempo de vida de um objeto alocado na Stack.
- Quando a variável sai de escopo (seja por
returnnormal ou porthrow), o destrutor (~Classe()) é executado infalivelmente pelo compilador!
🎯 Slide 2: Construtores e Inicialização em Lista
class Sensor {
private:
const int id_;
std::string nome_;
public:
// Member Initializer List (inicializa direto sem atribuição redundante):
Sensor(int id, std::string_view nome)
: id_{id}, nome_{nome} {}
};
🎯 Slide 3: Palavra-Chave explicit
- Construtores de um único argumento devem ser marcados com
explicitpara proibir conversões implícitas acidentais de tipo (Sensor s = 10;é bloqueado).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim