0Pricing
C++ Academy · Lección

Tiempo de vida de los objetos

Comprenda cuándo se crean y destruyen los objetos

Tiempo de vida de los objetos es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Cuándo nacen los objetos

El ciclo de vida de un objeto comienza después de asignar su almacenamiento y finalizar su constructor. A partir de ese momento, el objeto se puede utilizar plenamente.

#include <iostream>

struct Widget {
    Widget() { std::cout << "born\n"; }
};

int main() {
    Widget w;   // constructor runs here
}

Cuándo mueren los objetos

El ciclo de vida termina cuando se ejecuta el destructor. En un objeto de la pila, esto ocurre en la llave de cierre de su ámbito.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget w;
    std::cout << "alive\n";
}   // ~Widget runs here

Orden de construcción y destrucción

Los objetos se destruyen en el orden inverso al de su construcción. El último que se construye es el primero que se desmonta.

#include <iostream>

struct Tag {
    int id;
    Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
    ~Tag() { std::cout << "drop " << id << "\n"; }
};

int main() {
    Tag a(1);
    Tag b(2);   // dropped before a
}

Ciclo de vida automático (de la pila)

Los objetos automáticos viven durante toda la duración del bloque que los contiene. Este es el modelo de ciclo de vida más común y seguro.

Ciclo de vida dinámico (del montón)

Los objetos del montón creados con new viven hasta que se llama a delete; su ciclo de vida lo controla usted, no el ámbito.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget* w = new Widget();
    std::cout << "still alive\n";
    delete w;   // destructor runs here
}

Ciclo de vida estático

Los objetos con almacenamiento static viven durante todo el programa. Un objeto estático local de una función se construye una vez, la primera vez que se usa.

#include <iostream>

int next() {
    static int counter = 0;   // built once
    return ++counter;
}

int main() {
    std::cout << next() << next() << next() << "\n";
}

Objetos temporales

Un objeto temporal creado en una expresión normalmente muere al final de la expresión completa (el punto y coma).

#include <iostream>
#include <string>

int main() {
    std::cout << (std::string("a") + "b") << "\n";
}   // temporary string dies after this line

Los miembros se construyen antes del cuerpo

Los objetos miembro de una clase se construyen antes de que se ejecute el cuerpo del constructor del objeto que los contiene y se destruyen después de su cuerpo de destructor.

#include <iostream>
#include <string>

struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
    Engine e;
    Car() { std::cout << "car\n"; }
};

int main() { Car c; }

Extensión del ciclo de vida mediante una referencia const

Vincular un objeto temporal a una const& extiende su ciclo de vida para que coincida con el de la referencia: una útil regla de C++.

#include <iostream>
#include <string>

int main() {
    const std::string& s = std::string("hi");
    std::cout << s << "\n";   // s still valid
}

Uso después del fin del ciclo de vida

Acceder a un objeto después de que termine su ciclo de vida produce un comportamiento indefinido: el clásico error de referencia colgante o uso después de liberar.

El ciclo de vida sustenta RAII

Como los destructores se ejecutan de forma determinista al final del ciclo de vida, C++ vincula la limpieza de recursos al ciclo de vida: la base de RAII, que se aborda en el curso siguiente.

Comprobación rápida

Compruebe su comprensión del ciclo de vida de los objetos.

Resumen

Ha aprendido que el ciclo de vida de un objeto comienza después de su construcción y termina con su destrucción. Los objetos automáticos siguen el ámbito, los dinámicos siguen a new/delete y los estáticos duran todo el programa. La destrucción ocurre en orden inverso, lo que constituye la base de RAII.

Preguntas frecuentes

¿La lección «Tiempo de vida de los objetos» es gratis?

Sí — el texto completo de «Tiempo de vida de los objetos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Tiempo de vida de los objetos»?

Comprenda cuándo se crean y destruyen los objetos Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Tiempo de vida de los objetos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Asignación en la pila
  2. Asignación en el heap con new/delete
  3. Tiempo de vida de los objetos
  4. Errores habituales de memoria
← Volver a C++ Academy