Smart Pointers
Un unique_ptr posee un object asignado en el heap de forma exclusiva — cuando sale de scope, su destructor elimina automáticamente el object que posee, apoyándose directamente en el patrón RAII visto antes en este curso. make_unique crea uno sin escribir nunca new o delete a mano.
#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
Un shared_ptr permite múltiples owners del mismo object, rastreando cuántos shared_ptrs apuntan a él actualmente mediante un conteo de referencias. El object solo se destruye cuando ese conteo llega a cero — útil cuando genuinamente no es posible tener un ú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
El código C++ moderno recurre a unique_ptr y shared_ptr por defecto, y trata el new/delete crudo como último recurso — los smart pointers te dan la misma limpieza determinista que cualquier otro type RAII, sin que el programador tenga que acordarse de llamar a delete manualmente.
Siguiente: exceptions y manejo de errores — try, catch, y throw.
Practice exercise
Usa make_unique para crear un unique_ptr<int> que contenga el valor 99, luego imprime el valor al que apunta.