Menu
Coddy logo textTech

Récapitulatif - Mock de Smart Pointer

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 58 sur 61.

challenge icon

Défi

Facile

Construisons un simulacre de pointeur intelligent appelé SmartBox qui démontre comment les véritables pointeurs intelligents de Rust fonctionnent sous le capot ! Votre wrapper sera générique, fournira un accès à sa valeur interne et annoncera automatiquement quand il est en cours de nettoyage.

Vous organiserez votre code sur deux fichiers :

  • smart_box.rs : Définissez une structure générique publique SmartBox<T> avec un seul champ value de type T. Implémentez une fonction associée new qui crée une SmartBox et affiche un message de création. Ajoutez une méthode get qui retourne une référence à la valeur interne. Enfin, implémentez le trait Drop pour afficher un message de nettoyage lorsque la SmartBox sort de la portée.
  • main.rs : Importez votre module smart_box et faites une démonstration de votre SmartBox avec deux types différents. Créez une SmartBox<i32> contenant un nombre et une SmartBox<String> contenant du texte (tous deux provenant des entrées fournies). Affichez les valeurs en utilisant votre méthode get. Les messages Drop apparaîtront automatiquement lorsque les boîtes sortiront de la portée à la fin de main.

Lorsqu'une SmartBox est créée, elle doit afficher :

SmartBox created

Lors de l'accès à la valeur, affichez-la dans ce format :

Value: {value}

Lorsqu'une SmartBox est supprimée (dropped), elle doit afficher :

SmartBox dropped

Par exemple, avec les entrées 42 et Hello :

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

Remarquez comment les deux boîtes sont d'abord créées, puis leurs valeurs sont accédées, et enfin les deux sont supprimées dans l'ordre inverse (dernière créée, première supprimée) lorsque main se termine.

Vous recevrez deux entrées : une valeur entière (à analyser comme i32) et une valeur de chaîne de caractères.

Essayez vous-même

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Lire les entrées
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let number: i32 = input1.trim().parse().expect("Failed to parse number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let text = input2.trim().to_string();
    
    // TODO: Créer une SmartBox<i32> contenant le nombre
    
    // TODO: Créer une SmartBox<String> contenant le texte
    
    // TODO: Afficher les valeurs en utilisant la méthode get
    // Format : "Value: {value}"
    
    // Les messages Drop apparaîtront automatiquement quand main se termine
}

Toutes les leçons de Object Oriented Programming