Explorando el trato Drop de Rust

RustRustBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/MemorySafetyandManagementGroup -.-> rust/drop_trait("Drop Trait") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") subgraph Lab Skills rust/variable_declarations -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/string_type -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/function_syntax -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/expressions_statements -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/lifetime_specifiers -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/drop_trait -.-> lab-99217{{"Explorando el trato Drop de Rust"}} rust/traits -.-> lab-99217{{"Explorando el trato Drop de Rust"}} end

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.