AnyCompiler

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;
}
Output
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;
}
Output
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.