Smart Pointers
Um unique_ptr possui um object alocado no heap exclusivamente — quando sai de scope, seu destructor automaticamente deleta o object que possui, apoiando-se diretamente no padrão RAII visto antes neste curso. make_unique cria um sem nunca escrever new ou delete à mão.
#include <iostream>
#include <memory>
using namespace std;
class Resource {
public:
Resource() { cout << "Resource acquired" << endl; }
~Resource() { cout << "Resource released" << endl; }
void use() { cout << "Using resource" << endl; }
};
int main() {
unique_ptr<Resource> res = make_unique<Resource>();
res->use();
return 0;
}Resource acquired Using resource Resource released
shared_ptr
Um shared_ptr permite múltiplos owners do mesmo object, rastreando quantos shared_ptrs apontam para ele atualmente com uma contagem de referências. O object só é destruído quando essa contagem chega a zero — útil quando genuinamente não é possível ter um único owner claro.
#include <iostream>
#include <memory>
using namespace std;
int main() {
shared_ptr<int> a = make_shared<int>(42);
shared_ptr<int> b = a;
cout << "value = " << *a << endl;
cout << "use_count = " << a.use_count() << endl;
return 0;
}value = 42 use_count = 2
O código C++ moderno recorre a unique_ptr e shared_ptr por padrão, e trata o new/delete bruto como último recurso — smart pointers te dão a mesma limpeza determinística que qualquer outro type RAII, sem que o programador precise lembrar de chamar delete manualmente.
A seguir: exceptions e tratamento de erros — try, catch, e throw.
Practice exercise
Use make_unique para criar um unique_ptr<int> contendo o valor 99, depois imprima o valor para o qual ele aponta.