Jenis penunjuk pintar dalam Rust termasuk: Kotak: menunjuk kepada nilai pada timbunan dan secara automatik melepaskan objek untuk mengelakkan kebocoran memori. Rc: membenarkan berbilang penunjuk untuk menghala ke objek timbunan yang sama, dan melepaskan objek apabila penunjuk terakhir hilang. Arka: Serupa dengan Rc, tetapi menyokong akses serentak berbilang benang. RefCell: Menyediakan peminjaman boleh ubah objek tidak berubah, memastikan hanya satu utas mengubah suai objek pada satu masa.
Penunjuk pintar ialah penunjuk kepada objek yang diperuntukkan secara dinamik yang digunakan untuk mengurus kitaran hayatnya dan mengelakkan kebocoran memori. Terdapat jenis penunjuk pintar berikut dalam Rust:
Box
let x = Box::new(5);
Rc
let x = Rc::new(5); let y = x.clone();
Arc
Rc
, tetapi menyokong akses serentak berbilang benang. Rc
类似,但支持多线程并发访问。Arc
指针。use std::sync::Arc; let x = Arc::new(5); let thread = std::thread::spawn(move || { println!("{}", x); });
RefCell
use std::cell::RefCell; let x = RefCell::new(5); let mut y = x.borrow_mut(); *y = 6;
实战案例:管理二叉树节点
struct Node { value: i32, left: Option<Box<Node>>, right: Option<Box<Node>>, } impl Node { fn new(value: i32) -> Self { Self { value, left: None, right: None, } } fn insert(&mut self, value: i32) { if value < self.value { if let Some(ref mut left) = self.left { left.insert(value); } else { self.left = Some(Box::new(Node::new(value))); } } else { if let Some(ref mut right) = self.right { right.insert(value); } else { self.right = Some(Box::new(Node::new(value))); } } } } let mut root = Box::new(Node::new(10)); root.insert(5); root.insert(15);
在本例中,Box
Atas ialah kandungan terperinci Apakah jenis penunjuk pintar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!