Avatar ·

O que é um smart pointer e quando deve ser usado?

Olá a todos! Comecei a estudar C++ recentemente e constantemente enfrento problemas ao trabalhar com memória. Especialmente me assustam os vazamentos de memória e os dangling pointers. Por exemplo, frequentemente escrevo código assim: ```cpp class MyClass { public: int* data; MyClass() { data = new int(42); } ~MyClass() { delete data; } }; void example() { MyClass* obj = new MyClass(); // ... algum código que pode lançar uma exceção delete obj; } ``` O problema é que se entre `new` e `delete` ocorrer uma exceção, ou se eu esquecer de chamar `delete`, a memória vaza. E se alguém deletar o objeto antes do tempo, e eu continuar usando — o programa quebra. Ouvi dizer que no C++11 surgiram os "smart pointers", que devem resolver esses problemas. Mas não entendo como eles funcionam e quando aplicá-los. Qual é a diferença entre `unique_ptr`, `shared_ptr` e `weak_ptr`? É necessário ainda usar ponteiros comuns? E como corrigir