Trong Rust còn có một loại con trỏ khác có tên là con trỏ Box, đây là con trỏ dùng cho kiểu generic T
, tức là dùng cho bất kì kiểu dữ liệu nào. Khi dùng con trỏ Box
thì dữ liệu sẽ được lưu trên bộ nhớ heap.
Để tạo một biến con trỏ Box
thì chúng ta dùng hàm Box::new
, ví dụ như sau:
struct Blog {
year: i32,
name: &’static str
}
fn main() {
let mut a1 = Box::new(Blog {
year: 2017,
name: "phocode.com"
});
println!("{}", a1.year);
}
Trong đoạn code trên chúng ta khai báo biến a1
là một biến con trỏ Box
chứa dữ liệu là một biến Blog
.
2017
Cơ chế borrowing và ownership trong con trỏ Box cũng hoàn toàn giống như với con trỏ bình thường.
Ngoài các struct
thì Box
cũng hỗ trợ các kiểu dữ liệu cơ bản, ví dụ:
fn main() {
let a = Box::new(2017);
let b = Box::new("phocode.com");
let mut c = Box::new("3.14");
*c = 3.14159;
}
Mặc định thì nếu không chỉ định là biến mut
thì các biến sẽ không thể thay đổi giá trị được, giống như với các con trỏ bình thường.