Menu
Coddy logo textTech

Recapitulação - Mock de Smart Pointer

Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 58 de 61.

challenge icon

Desafio

Fácil

Vamos construir um mock de smart pointer chamado SmartBox que demonstra como os smart pointers reais do Rust funcionam por baixo dos panos! Seu wrapper será genérico, fornecerá acesso ao seu valor interno e anunciará automaticamente quando estiver sendo limpo.

Você organizará seu código em dois arquivos:

  • smart_box.rs: Defina uma struct genérica pública SmartBox<T> com um único campo value do tipo T. Implemente uma função associada new que cria um SmartBox e imprime uma mensagem de criação. Adicione um método get que retorna uma referência ao valor interno. Por fim, implemente a trait Drop para imprimir uma mensagem de limpeza quando o SmartBox sair de escopo.
  • main.rs: Importe seu módulo smart_box e demonstre seu SmartBox com dois tipos diferentes. Crie um SmartBox<i32> contendo um número e um SmartBox<String> contendo texto (ambos provenientes das entradas fornecidas). Imprima os valores usando seu método get. As mensagens de Drop aparecerão automaticamente quando as boxes saírem de escopo ao final da função main.

Quando um SmartBox for criado, ele deve imprimir:

SmartBox created

Ao acessar o valor, imprima-o neste formato:

Value: {value}

Quando um SmartBox for descartado (dropped), ele deve imprimir:

SmartBox dropped

Por exemplo, com as entradas 42 e Hello:

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

Observe como ambas as boxes são criadas primeiro, depois seus valores são acessados e, finalmente, ambas são descartadas na ordem inversa (a última criada é a primeira a ser descartada) quando a função main termina.

Você receberá duas entradas: um valor inteiro (converta para i32) e um valor de string.

Experimente você mesmo

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Lê as 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: Criar um SmartBox<i32> contendo o número
    
    // TODO: Criar um SmartBox<String> contendo o texto
    
    // TODO: Imprimir os valores usando o método get
    // Formato: "Value: {value}"
    
    // As mensagens de Drop aparecerão automaticamente quando main terminar
}

Todas as lições de Object Oriented Programming