Explorer le trait Drop de Rust

RustRustBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous explorons l'utilisation du trait Drop en Rust, qui est appelé automatiquement lorsqu'un objet sort de portée et est utilisé pour libérer les ressources que l'objet possède.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec 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{{"Explorer le trait Drop de Rust"}} rust/string_type -.-> lab-99217{{"Explorer le trait Drop de Rust"}} rust/function_syntax -.-> lab-99217{{"Explorer le trait Drop de Rust"}} rust/expressions_statements -.-> lab-99217{{"Explorer le trait Drop de Rust"}} rust/lifetime_specifiers -.-> lab-99217{{"Explorer le trait Drop de Rust"}} rust/drop_trait -.-> lab-99217{{"Explorer le trait Drop de Rust"}} rust/traits -.-> lab-99217{{"Explorer le trait Drop de Rust"}} end

Drop

Le trait Drop n'a qu'une seule méthode : drop, qui est appelée automatiquement lorsqu'un objet sort de portée. L'utilisation principale du trait Drop est de libérer les ressources que possède l'instance de l'implémentation.

Box, Vec, String, File et Process sont quelques exemples de types qui implémentent le trait Drop pour libérer des ressources. Le trait Drop peut également être implémenté manuellement pour n'importe quel type de données personnalisé.

L'exemple suivant ajoute une impression à la console à la fonction drop pour annoncer lorsqu'elle est appelée.

struct Droppable {
    name: &'static str,
}

// Cette implémentation triviale de `drop` ajoute une impression à la console.
impl Drop for Droppable {
    fn drop(&mut self) {
        println!("> Dropping {}", self.name);
    }
}

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

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

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

            println!("Exiting block B");
        }
        println!("Just exited block B");

        println!("Exiting block A");
    }
    println!("Just exited block A");

    // La variable peut être supprimée manuellement en utilisant la fonction `drop`
    drop(_a);
    // TODO ^ Essayez de commenter cette ligne

    println!("fin de la fonction principale");

    // `_a` *ne sera pas* supprimé à nouveau ici, car il a déjà été
    // (manuellement) supprimé
}

Résumé

Félicitations ! Vous avez terminé le laboratoire sur Drop. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.