回顾:智能指针模拟
本课属于 Coddy Rust 学习旅程的“面向对象编程”单元。第 58 课,共 61 课。
挑战
简单让我们构建一个名为 SmartBox 的智能指针模拟对象,演示 Rust 的实际智能指针在底层是如何工作的!这个包装器将是泛型的,可以访问内部值,并会在清理时自动发出提示。
你要将代码分成两个文件:
smart_box.rs:定义一个公开的泛型结构体SmartBox<T>,其中只有一个类型为T的字段value。实现一个关联函数new,用于创建 SmartBox 并打印创建提示。添加一个get方法,用于返回内部值的引用。最后,实现Drop特征,让 SmartBox 离开作用域时打印清理提示。main.rs:引入 smart_box 模块,并用两种不同的数据类型演示 SmartBox。创建一个存放数字的SmartBox<i32>和一个存放文本的SmartBox<String>(两者都使用提供的输入)。使用get方法打印这些值。当 main 结束时,两个盒子离开作用域,Drop 提示会自动出现。
创建 SmartBox 时,它应该打印:
SmartBox created访问值时,按以下格式打印:
Value: {value}丢弃 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}”
// 当 main 结束时,Drop 消息会自动显示
}
面向对象编程中的所有课
自己练习: Rust 在线编译器