Menu
Coddy logo textTech

Zusammenfassung – Smart Pointer Mock

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 58 von 61.

challenge icon

Aufgabe

Einfach

Erstellen wir einen Smart-Pointer-Mock namens SmartBox, der demonstriert, wie die tatsächlichen Smart-Pointer von Rust unter der Haube funktionieren! Deine Wrapper-Struktur wird generisch sein, Zugriff auf ihren inneren Wert ermöglichen und automatisch ankündigen, wenn sie bereinigt wird.

Du organisierst deinen Code über zwei Dateien:

  • smart_box.rs: Definiere eine öffentliche generische Struktur SmartBox<T> mit einem einzigen Feld value vom Typ T. Implementiere eine zugehörige Funktion new, die eine SmartBox erstellt und eine Erstellungsmeldung ausgibt. Füge eine Methode get hinzu, die eine Referenz auf den inneren Wert zurückgibt. Implementiere schließlich das Merkmal Drop, um eine Bereinigungsmeldung auszugeben, wenn die SmartBox ihren Gültigkeitsbereich verlässt.
  • main.rs: Binde dein Modul smart_box ein und demonstriere deine SmartBox mit zwei verschiedenen Typen. Erstelle eine SmartBox<i32>, die eine Zahl enthält, und eine SmartBox<String>, die Text enthält (beides aus den bereitgestellten Eingaben). Gib die Werte mithilfe deiner get-Methode aus. Die Drop-Meldungen erscheinen automatisch, wenn die Boxen am Ende von main ihren Gültigkeitsbereich verlassen.

Wenn eine SmartBox erstellt wird, sollte sie Folgendes ausgeben:

SmartBox created

Beim Zugriff auf den Wert gib ihn in diesem Format aus:

Value: {value}

Wenn eine SmartBox verworfen wird, sollte sie Folgendes ausgeben:

SmartBox dropped

Beispielsweise mit den Eingaben 42 und Hello:

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

Beachte, dass zunächst beide Boxen erstellt werden, anschließend auf ihre Werte zugegriffen wird und schließlich beide in umgekehrter Reihenfolge (zuletzt erstellt, zuerst verworfen) verworfen werden, wenn main endet.

Du erhältst zwei Eingaben: einen Ganzzahlwert (als i32 parsen) und einen Zeichenkettenwert.

Probier es selbst

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Eingaben lesen
    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: Erstelle eine SmartBox<i32>, die die Zahl enthält
    
    // TODO: Erstelle eine SmartBox<String>, die den Text enthält
    
    // TODO: Gib die Werte mit der get-Methode aus
    // Format: "Value: {value}"
    
    // Die Drop-Nachrichten erscheinen automatisch, wenn main endet
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler