0Pricing
C++ Academy · Lección

El principio RAII

Vincule los recursos al tiempo de vida del objeto

El principio RAII es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 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.

Qué significa RAII

RAII significa Adquisición de recursos es inicialización. Un recurso se adquiere en un constructor y se libera en el destructor, vinculando su ciclo de vida al de un objeto.

La idea central

Encapsule cada recurso —memoria, archivos, bloqueos y sockets— en un objeto. Cuando el objeto sale del ámbito, su destructor libera el recurso automáticamente.

#include <iostream>

class Resource {
public:
    Resource() { std::cout << "acquire\n"; }
    ~Resource() { std::cout << "release\n"; }
};

int main() {
    Resource r;   // acquired
}                 // released automatically

Por qué RAII es potente

La limpieza está garantizada incluso si una función retorna antes de tiempo o se lanza una excepción. Nunca puede olvidar liberar un recurso que haya encapsulado.

Un pequeño envoltorio RAII

Aquí tiene un propietario de tipo int que libera su memoria del montón en el destructor, sin llamadas manuales a delete en los puntos de llamada.

#include <iostream>

class IntBox {
    int* p;
public:
    IntBox(int v) : p(new int(v)) {}
    ~IntBox() { delete p; }
    int get() const { return *p; }
};

int main() {
    IntBox b(42);
    std::cout << b.get() << "\n";
}

Limpieza al retornar antes de tiempo

Como el destructor se ejecuta al salir del ámbito, un return anticipado también activa la limpieza.

#include <iostream>

class Guard {
public:
    ~Guard() { std::cout << "cleaned\n"; }
};

void work(bool stop) {
    Guard g;
    if (stop) return;   // g still cleaned
    std::cout << "more work\n";
}

int main() { work(true); }

Limpieza al producirse excepciones

Si una excepción desenrolla la pila, todos los objetos RAII completamente construidos se destruyen durante el proceso. Los recursos nunca quedan abandonados.

Tipos RAII estándar

La biblioteca estándar está llena de RAII: std::unique_ptr, std::lock_guard, std::fstream y std::vector realizan la limpieza en sus destructores.

#include <vector>
#include <memory>

int main() {
    std::vector<int> v{1, 2, 3};        // frees its buffer
    auto p = std::make_unique<int>(9);  // frees its int
}

Sin código de limpieza manual

Con RAII, deja de escribir manualmente delete, fclose o unlock. Las llamadas a destructores insertadas por el compilador lo hacen por usted.

Un propietario por recurso

Cada recurso debe tener un único propietario RAII responsable de liberarlo. Compartir la propiedad de forma segura requiere tipos especiales como std::shared_ptr.

RAII se compone

Un objeto RAII puede contener otros objetos RAII. La destrucción se propaga automáticamente, por lo que los recursos complejos se limpian correctamente.

#include <memory>
#include <vector>

struct Session {
    std::vector<int> data;                 // RAII
    std::unique_ptr<int> token;            // RAII
};   // both members freed automatically

RAII frente a la gestión manual

La gestión manual es propensa a errores; RAII convierte la limpieza correcta en el comportamiento predeterminado. Prefiera los envoltorios RAII a los pares directos de adquisición y liberación en todos los casos.

Comprobación rápida

Compruebe su comprensión de RAII.

Resumen

Ha aprendido el principio RAII: adquirir en el constructor y liberar en el destructor. Esto garantiza la limpieza al salir normalmente, al retornar antes de tiempo y cuando se producen excepciones. La biblioteca estándar utiliza RAII en todas partes, y su código también debería hacerlo.

Preguntas frecuentes

¿La lección «El principio RAII» es gratis?

Sí — el texto completo de «El principio RAII» 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 «El principio RAII»?

Vincule los recursos al tiempo de vida del objeto 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 1 de 4.

¿Cuánto tiempo toma la lección «El principio RAII»?

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. El principio RAII
  2. Destructores y limpieza
  3. Regla de tres/cinco
  4. Guardas de ámbito
← Volver a C++ Academy