Punteros inteligentes en C++11

Como se ha dicho otras veces, las mejores de C++11 son evidentes. Tres ejemplos son la facilidad de convertir un entero a cadena en C++, utilizar bucles for basados en rangos o usar expresiones regulares.

Aquí os muestro, mediante un ejemplo, la facilidad con la que en C++11 se manejan los punteros, olvidándote de tener que liberar memoria:

#include <memory>

void funcion()
{
    int * p1 = new int; // Método tradicional para asignar memoria
    
    /* Código donde se usa el puntero 'p1' */
    
    delete p1; // ¡Recuerda liberar la memoria!

    std::shared_ptr<int> p2(new int); // Nuevo método para asignar memoria

    /* Código donde se usa el puntero 'p2' */
    
    // ¡Y olvídate de liberar memoria!
}

int main()
{
    funcion();
   
    return 0;
}

El ejemplo se ha mostrado mediante el puntero inteligente shared_ptr que permite compartir el puntero, si estás seguro que el puntero es único usa unique_ptr.