Menu
Coddy logo textTech

Итоги — Мок-объект Smart Pointer

Часть раздела Object Oriented Programming путешествия по Rust на Coddy — урок 58 из 61.

challenge icon

Задание

Легко

Давайте создадим имитацию умного указателя под названием SmartBox, которая демонстрирует, как работают настоящие умные указатели в Rust изнутри! Ваша обертка будет универсальной (generic), обеспечит доступ к внутреннему значению и будет автоматически сообщать о своей очистке.

Вы организуете свой код в двух файлах:

  • smart_box.rs: Определите публичную универсальную структуру SmartBox<T> с единственным полем value типа T. Реализуйте связанную функцию new, которая создает SmartBox и выводит сообщение о создании. Добавьте метод get, который возвращает ссылку на внутреннее значение. Наконец, реализуйте типаж Drop для вывода сообщения об очистке, когда SmartBox выходит из области видимости.
  • main.rs: Подключите ваш модуль smart_box и продемонстрируйте работу SmartBox с двумя разными типами. Создайте SmartBox<i32>, содержащий число, и SmartBox<String>, содержащий текст (оба значения берутся из предоставленных входных данных). Выведите значения, используя метод get. Сообщения Drop появятся автоматически, когда боксы выйдут из области видимости в конце функции main.

При создании SmartBox должно выводиться сообщение:

SmartBox created

При доступе к значению выводите его в следующем формате:

Value: {value}

При удалении (drop) SmartBox должно выводиться сообщение:

SmartBox dropped

Например, при входных данных 42 и Hello:

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

Обратите внимание, что сначала создаются оба бокса, затем происходит доступ к их значениям, и, наконец, оба удаляются в обратном порядке (последний созданный удаляется первым), когда завершается выполнение main.

Вы получите два входных значения: целое число (преобразуйте в i32) и строку.

Попробуйте сами

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Чтение входных данных
    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: Создать SmartBox<i32>, содержащий число
    
    // TODO: Создать SmartBox<String>, содержащий текст
    
    // TODO: Вывести значения, используя метод get
    // Формат: "Value: {value}"
    
    // Сообщения Drop появятся автоматически при завершении main
}

Все уроки раздела Object Oriented Programming