Manejo de Memoria basado en Scope (ámbitos)

Los constructores y destructores permiten acceder al tiempo de vida de un objeto.

Al envolver un puntero en un objeto, puedes liberar memoria cuando el objeto se destruya. El compilador asegura que esto ocurra, aunque se genere una excepción.

A menudo, significa que la adquisición de recursos es la inicialización (RAII) y te proporciona punteros inteligentes.

Ejemplo en C++

void say_hello(std::unique_ptr<Person> person) {
  std::cout << "Hola " << person->name << std::endl;
}
  • El objeto std::unique_ptr se reserva en el stack y apunta a la memoria asignada en el heap.
  • Al final de say_hello, se ejecuta el destructor std::unique_ptr.
  • El destructor libera el objeto Person al que apunta.

Los constructores de movimiento especiales se utilizan cuando se pasa el ownership a una función:

std::unique_ptr<Person> person = find_person("Carla");
say_hello(std::move(person));