DEV Community

Cover image for Dia 3 - Garbage collector e .h
Matheus Gomes
Matheus Gomes

Posted on

1

Dia 3 - Garbage collector e .h

Iniciei meu primeiro projeto em C++ e já aprendi algumas coisas interessantes.

Comecei criando o 'blank canvas' e o principal para o jogo funcionar: o game loop.

Sobre Garbage Collector

Enquanto estava implementando essas funcionalidades, eu percebi que instanciei um objeto do seguinte modo:

 Food food = Food();
Enter fullscreen mode Exit fullscreen mode

Olhei pra essa linha, e tive a sensação de faltar algo.
Normalmente em Java, ou até mesmo em TypeScript, quando instanciamos um objeto vem a palavra new antes dele. E descobri que no C++ também tem esse new mas por qual motivo ele não foi utilizado?

Bem, quando instanciamos o objeto desse modo, ele é alocado na pilha(stack), ou seja, quando o objeto sai do escopo (por exemplo, ao final da função), ele é "destruído" automaticamente e sua memória é liberada.

Utilizando o new o objeto é alocado no heap, e por conta disso temos que liberar a memória com a palavra reservada delete no final do escopo.

Com o Java não há problema alocar objetos no heap (inclusive, esse é o único modo) pois a memória é gerenciada automaticamente pelo Garbage Collector.

E o que é garbage collector?
Resumindo: É um sistema de gerenciamento automático de memória, ele detecta e libera memória ocupada por objetos e variáveis que não estão mais sendo utilizadas, evitando vazamento de memória(memory leak).

Então, podemos concluir que o C++ não tem garbage collector, pois quando alocamos um objeto no heap, temos que liberar a memória ao final do escopo para não haver memory leak.

Mas, se C++ não tem garbage collector, por qual razão não precisamos preocupar com vazamento de memória quando instanciamos um objeto na stack?
Isso acontece pelo seguinte motivo: Quando um objeto é alocado na stack a memória é automaticamente liberada por conta de um destrutor e de um gerenciamento feito no tempo de vida dos objetos que ocorre na stack chamado RAII (Resource Acquisition Is Initialization).

Tá, mas então o que diferencia o RAII do Garbage Collector?
Olha... isso é um buraco de coelho. Irei aceitar por enquanto que o que difere um do outro é a maneira de como os recursos são liberados.

Deixo com vocês as vantagens e desvantagens pontuadas pelo nosso amigo ChatGPT:

Vantagens e Desvantagens

**RAII**:

**Vantagens**:
- Controle preciso e previsível sobre quando os recursos são liberados.
- Não há sobrecarga de tempo de execução para monitorar e coletar objetos.
- Boa para gerenciar diferentes tipos de recursos, não apenas memória.

**Desvantagens**:
- Requer que o programador entenda bem como funcionam os construtores e destrutores.
- Não gerencia a memória no heap automaticamente. Se o programador usar `new`, é necessário usar `delete` manualmente.

**Garbage Collector**:

**Vantagens**:
- Facilita o gerenciamento de memória, pois o programador não precisa se preocupar em liberar memória manualmente.
- Reduz o risco de erros manuais, como vazamentos de memória ou uso de ponteiros para memória já liberada.

**Desvantagens**:
- O garbage collector pode introduzir sobrecargas de desempenho, especialmente em sistemas de tempo real, devido às pausas imprevisíveis.
- A coleta de memória é não determinística, o que significa que a memória pode permanecer alocada por mais tempo do que o necessário, aumentando o consumo de recursos.

Enter fullscreen mode Exit fullscreen mode

Sobre o .h

De forma bem breve, da pra dizer que o .h do C++ funciona de modo parecido com uma interface em Java.
Ambos separam o que o código faz de como o código faz.
O .h é uma assinatura de como a classe deve ser, assim como na interface que é utilizada no Java.

Proximos passos

Vou continuar codando esse snake game, e tem me passado na cabeça codar um Sistema Operacional, acho que programar muitos jogos vai ficar massante, então partirei para outros tipos de projetos.

Tchau.

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs