Explorando el trato Drop de Rust

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este laboratorio, exploramos el uso del trato Drop en Rust, que se llama automáticamente cuando un objeto sale del ámbito y se utiliza para liberar los recursos que posee el objeto.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.

Drop

El trato Drop solo tiene un método: drop, que se llama automáticamente cuando un objeto sale del ámbito. La principal utilización del trato Drop es liberar los recursos que posee la instancia del implementador.

Box, Vec, String, File y Process son algunos ejemplos de tipos que implementan el trato Drop para liberar recursos. El trato Drop también se puede implementar manualmente para cualquier tipo de datos personalizado.

El siguiente ejemplo agrega una impresión en la consola a la función drop para anunciar cuando se llama.

struct Droppable {
    name: &'static str,
}

// Esta implementación trivial de `drop` agrega una impresión en la consola.
impl Drop for Droppable {
    fn drop(&mut self) {
        println!("> Dropping {}", self.name);
    }
}

fn main() {
    let _a = Droppable { name: "a" };

    // bloque A
    {
        let _b = Droppable { name: "b" };

        // bloque B
        {
            let _c = Droppable { name: "c" };
            let _d = Droppable { name: "d" };

            println!("Saliendo del bloque B");
        }
        println!("Acaba de salir del bloque B");

        println!("Saliendo del bloque A");
    }
    println!("Acaba de salir del bloque A");

    // La variable se puede eliminar manualmente usando la función `drop`
    drop(_a);
    // TODO ^ Intenta comentar esta línea

    println!("fin de la función principal");

    // `_a` *no* se `drop`ará nuevamente aquí, porque ya se ha
    // (manualmente) `drop`ado
}

Resumen

¡Felicitaciones! Has completado el laboratorio de Drop. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.