O que são smart pointers e quando usá-los?
Olá, colegas! Escrevo em C++ há pouco tempo, mas já enfrentei problemas de vazamento de memória. Ainda uso raw pointers comuns com `new` e `delete`, mas constantemente esqueço de chamar `delete`, especialmente quando o código fica cheio de exceções e retornos antecipados. Por exemplo:
```cpp
void process() {
Resource* res = new Resource();
// ... algum código que pode lançar exceção ...
delete res; // se houve exceção, não chegamos aqui — vazamento!
}
```
Ouvi falar sobre smart pointers em C++11, mas não entendo completamente o que são. Há muita informação na internet, mas quero uma explicação clara: o que são essas ferramentas, como diferem dos ponteiros comuns, e em quais situações realmente devo usá-los? Estou especialmente interessado em `std::unique_ptr`, `std::shared_ptr` e `std::weak_ptr`. Quando escolher qual? Existem armadilhas? Agradeço por exemplos de código e explicações para iniciantes.
<<>>
O que é um smart pointer?
Um smart po