Menu
Coddy logo textTech

Ripasso - Mock con smart pointer

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 58 di 61.

challenge icon

Sfida

Facile

Costruiamo un simulatore di puntatore intelligente chiamato SmartBox che dimostra come funzionano dietro le quinte i veri puntatori intelligenti di Rust! Il tuo involucro sarà generico, permetterà di accedere al suo valore interno e annuncerà automaticamente quando viene eliminato.

Organizzerai il codice in due file:

  • smart_box.rs: definisci una struct generica pubblica SmartBox<T> con un unico campo value di tipo T. Implementa una funzione associata new che crea uno SmartBox e stampa un messaggio di creazione. Aggiungi un metodo get che restituisce un riferimento al valore interno. Infine, implementa il trait Drop per stampare un messaggio di eliminazione quando lo SmartBox esce dall'ambito.
  • main.rs: includi il modulo smart_box e mostra il funzionamento del tuo SmartBox con due tipi diversi. Crea uno SmartBox<i32> che contiene un numero e uno SmartBox<String> che contiene del testo (entrambi ricavati dagli input forniti). Stampa i valori usando il tuo metodo get. I messaggi di Drop appariranno automaticamente quando gli SmartBox usciranno dall'ambito alla fine di main.

Quando viene creato uno SmartBox, deve stampare:

SmartBox created

Quando accedi al valore, stampalo in questo formato:

Value: {value}

Quando uno SmartBox viene eliminato, deve stampare:

SmartBox dropped

Per esempio, con gli input 42 e Hello:

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

Nota che entrambi gli SmartBox vengono creati per primi, poi si accede ai loro valori e infine vengono eliminati entrambi in ordine inverso (l'ultimo creato è il primo a essere eliminato) quando main termina.

Riceverai due input: un valore intero (da analizzare come i32) e una stringa.

Provalo tu

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Leggi gli input
    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: Crea uno SmartBox<i32> che contenga il numero
    
    // TODO: Crea uno SmartBox<String> che contenga il testo
    
    // TODO: Stampa i valori usando il metodo get
    // Formato: "Value: {value}"
    
    // I messaggi di Drop appariranno automaticamente al termine di main
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online