Menu
Coddy logo textTech

Resumen - Mock de Smart Pointer

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 58 de 61.

challenge icon

Desafío

Fácil

¡Vamos a construir un simulacro de puntero inteligente llamado SmartBox que demuestre cómo funcionan los punteros inteligentes reales de Rust bajo el capó! Tu envoltura será genérica, proporcionará acceso a su valor interno y anunciará automáticamente cuando esté siendo limpiada.

Organizarás tu código en dos archivos:

  • smart_box.rs: Define una estructura genérica pública SmartBox<T> con un único campo value de tipo T. Implementa una función asociada new que cree un SmartBox e imprima un mensaje de creación. Añade un método get que devuelva una referencia al valor interno. Finalmente, implementa el trait Drop para imprimir un mensaje de limpieza cuando el SmartBox salga de alcance.
  • main.rs: Incorpora tu módulo smart_box y demuestra tu SmartBox con dos tipos diferentes. Crea un SmartBox<i32> que contenga un número y un SmartBox<String> que contenga texto (ambos provenientes de las entradas proporcionadas). Imprime los valores usando tu método get. Los mensajes de Drop aparecerán automáticamente cuando las cajas salgan de alcance al final de main.

Cuando se crea un SmartBox, debe imprimir:

SmartBox created

Al acceder al valor, imprímelo en este formato:

Value: {value}

Cuando un SmartBox es liberado (dropped), debe imprimir:

SmartBox dropped

Por ejemplo, con las entradas 42 y Hello:

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

Observa cómo ambas cajas se crean primero, luego se accede a sus valores y, finalmente, ambas se liberan en orden inverso (la última creada es la primera en liberarse) cuando termina main.

Recibirás dos entradas: un valor entero (analizado como i32) y un valor de cadena.

Pruébalo tú mismo

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Leer entradas
    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: Crear un SmartBox<i32> que contenga el número
    
    // TODO: Crear un SmartBox<String> que contenga el texto
    
    // TODO: Imprimir los valores usando el método get
    // Formato: "Value: {value}"
    
    // Los mensajes de Drop aparecerán automáticamente cuando main termine
}

Todas las lecciones de Object Oriented Programming