Carregando
0x70Lição 8 de 9

Gerencie recursos com RAII

Use o tempo de vida dos objetos e ponteiros inteligentes em vez de posse manual.

16 min Questionário com 5 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • Explicar o RAII e escolher entre valores, std::unique_ptr e posse compartilhada.

O RAII (resource acquisition is initialization, ou aquisição de recurso é inicialização) liga o tempo de vida de um recurso ao tempo de vida de um objeto. Quando o objeto sai de escopo, o destrutor dele libera os recursos que ele possui, inclusive durante o desempilhamento de uma exceção. Prefira valores comuns e contêineres padrão. Use std::unique_ptr para posse dinâmica exclusiva e std::shared_ptr só quando a posse for de fato compartilhada; ponteiros brutos e referências costumam ser visões sem posse.

main.cpp · C++20
1#include <iostream>
2#include <memory>
3
4int main() {
5    auto score = std::make_unique<int>(100);
6    std::cout << *score << "\n";
7}
Saída
100

std::unique_ptr não pode ser copiado, porque só deve haver um dono; a posse pode ser transferida com std::move. Na maior parte do código de aplicações, um vector ou uma string locais são mais simples do que alocar um array bruto com new.

Principais conclusões

  • Prefira primeiro valores e contêineres padrão.

  • Use o RAII para ligar a liberação ao tempo de vida do objeto.

  • Prefira a posse única, a menos que a posse compartilhada seja necessária.

Quiz da aula

5 perguntas · aprovação com 4 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C++

Escreva C++20 no editor e execute com entradas de exemplo. O GCC 14 compila o código pelo Compiler Explorer, um serviço público gratuito; seu código-fonte e a entrada de teste são enviados para lá.

Exercício 1

Seja dono de um valor com um ponteiro inteligente

+25 XP

Crie um int com std::make_unique, leia um valor substituto para ele e imprima Value: N. Não use new bruto.

  • Substitua o valor
main.c
Carregando editor…

Seu código é compilado como C++20 com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…