Ownership và borrowing
Rust Smart Pointers: Box and Rc
Put data on the heap with Box and share one value between several owners with Rc.
Bạn sẽ học được gì
- Box<T> for recursive types
- Rc<T> for shared ownership
- Rc::strong_count
A list built with Box
- 1
Node(1)points to - 2
Node(2)points to - 3
Node(3)points to - 4
Endsum = 6
Pointers that own their data
A smart pointer owns the data it points to. Box<T> stores a value on the heap, which makes recursive types possible. Rc<T> lets several owners share one value by counting them.
List contains itself, so its size would be infinite without Box: a Box has a fixed size because it is only a pointer. Rc::clone does not copy the string, it adds an owner, and strong_count shows three owners. The value is freed when the last owner is gone.
Những điểm quan trọng
- Box has a fixed size, so a type can contain itself.
Rc::cloneadds an owner, it does not copy the data.- The value is freed when the last owner is gone.
Ví dụ Rust chạy được
Rust
main.rs
use std::rc::Rc;
enum List {
Node(i32, Box<List>),
End,
}
fn sum(list: &List) -> i32 {
match list {
List::Node(value, next) => value + sum(next),
List::End => 0,
}
}
fn main() {
let list = List::Node(1, Box::new(List::Node(2, Box::new(List::Node(3, Box::new(List::End))))));
println!("sum = {}", sum(&list));
let shared = Rc::new(String::from("shared config"));
let reader_a = Rc::clone(&shared);
let reader_b = Rc::clone(&shared);
println!("{reader_a} / {reader_b}");
println!("owners: {}", Rc::strong_count(&shared));
}
sum = 6
shared config / shared config
owners: 3Luyện tập
Mở ví dụ trong trình biên dịch online, đổi một giá trị hoặc thêm một dòng, rồi đoán kết quả trước khi chạy. Sau đó cố ý làm code bị lỗi và đọc thông báo của trình biên dịch.
Bạn học xong bài này chưa?
Đánh dấu đã học để theo dõi tiến độ của bạn.
Tiến độ của bạn đang được lưu trong trình duyệt này Đăng nhập để giữ tiến độ trên mọi thiết bị.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
Tất cả thử thách