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 leakO que dá errado
Falhas comuns:
deleteesquecido — vazamento de memóriadeleteduplo — comportamento indefinido- Exceção lançada entre
newedelete— 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 exclusivastd::shared_ptr<T>— posse compartilhada com contagem de referênciasstd::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 destroyedPonteiros 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
- Por que os ponteiros inteligentes substituem new e delete brutos
- unique_ptr: propriedade exclusiva
- shared_ptr e weak_ptr: propriedade partilhada
- Eliminadores personalizados e funções make