0Pricing
C++ Academy · Aula

Por que os ponteiros inteligentes substituem new e delete brutos

Compreenda RAII e por que possuir ponteiros brutos raramente é correto no C++ moderno

Por que os ponteiros inteligentes substituem new e delete brutos é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

new e delete brutos

A herança do C: new T aloca um T na memória dinâmica; delete a libera. Você deve corresponder cada new a exatamente um delete — caso contrário, haverá um vazamento (ou uma falha).

Widget* w = new Widget();
// ... use w ...
delete w;        // forget this and you leak

O que dá errado

Falhas comuns:

  • delete esquecido — vazamento de memória
  • delete duplo — comportamento indefinido
  • Exceção lançada entre new e delete — vazamento
  • Retorno de um ponteiro bruto com posse não clara

RAII resolve

Aquisição de Recursos É Inicialização: associe o tempo de vida de um recurso ao tempo de vida de um objeto na pilha. O destrutor libera o recurso — mesmo que uma exceção seja lançada.

A ideia do ponteiro inteligente

Um ponteiro inteligente é um pequeno invólucro RAII para um ponteiro bruto. Seu destrutor chama delete. Você nunca se esquece de liberar o recurso.

Os três ponteiros inteligentes

Ponteiros inteligentes da biblioteca padrão em <memory>:

  • std::unique_ptr<T> — posse exclusiva
  • std::shared_ptr<T> — posse compartilhada com contagem de referências
  • std::weak_ptr<T> — observador sem posse de um shared_ptr

Ponteiros inteligentes são baratos

unique_ptr não tem sobrecarga adicional (tem o mesmo tamanho e a mesma velocidade de um ponteiro bruto). shared_ptr tem um pequeno custo de contagem atômica de referências.

Chega de delete manual

Com ponteiros inteligentes, você quase nunca escreve delete. O destrutor cuida disso.

#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyed

Ponteiros inteligentes e exceções

Se uma exceção for lançada no meio da função, as variáveis locais serão destruídas na ordem inversa. Os ponteiros inteligentes liberam seus recursos automaticamente — os ponteiros brutos vazam.

Posse no tipo

Agora o tipo do ponteiro inteligente codifica a posse. Ao ler a assinatura de uma função, você sabe quem possui o objeto.

// I take ownership
void consume(std::unique_ptr<Widget> w);

// I look but do not own
void inspect(const Widget& w);

Ponteiros brutos ainda existem

Use ponteiros brutos (ou referências) para acesso sem posse. Eles comunicam: "estou pegando emprestado, não sou o proprietário".

Substituindo new por funções make

Prefira std::make_unique (C++14) e std::make_shared (C++11). Eles são seguros contra exceções e um pouco mais eficientes do que chamar new diretamente.

auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");

Verificação rápida

Qual é o principal motivo para usar std::unique_ptr em vez de um par bruto de new/delete?

Recapitulação

new/delete brutos são propensos a erros. Os ponteiros inteligentes envolvem objetos alocados na memória dinâmica em mecanismos RAII que os liberam automaticamente. Prefira std::make_unique e std::make_shared por segurança e desempenho.

Perguntas Frequentes

A aula “Por que os ponteiros inteligentes substituem new e delete brutos” é grátis?

Sim — o texto completo de “Por que os ponteiros inteligentes substituem new e delete brutos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Por que os ponteiros inteligentes substituem new e delete brutos”?

Compreenda RAII e por que possuir ponteiros brutos raramente é correto no C++ moderno Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Por que os ponteiros inteligentes substituem new e delete brutos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que os ponteiros inteligentes substituem new e delete brutos
  2. unique_ptr: propriedade exclusiva
  3. shared_ptr e weak_ptr: propriedade partilhada
  4. Eliminadores personalizados e funções make
← Voltar para C++ Academy