Noções Básicas de Ponteiros Inteligentes
8 exemplos - 5 básicos, 3 intermediários - para tipos de ponteiros inteligentes.
Pré-requisitos
Exemplos Básicos
1. Box<T> Alocação na Heap
fn main() {
let b = Box::new(42);
println!("{}", *b);
}Ponteiro de heap com proprietário único.
2. Rc<T> Propriedade Compartilhada
use std::rc::Rc;
let a = Rc::new(String::from("compartilhado"));
let b = Rc::clone(&a);Contagem de referências - thread única.
3. Arc<T> Compartilhamento Seguro para Threads
use std::sync::Arc;
let a = Arc::new(vec![1, 2]);Contagem atômica de referências Send + Sync.
4. RefCell<T> Mutabilidade Interna
use std::cell::RefCell;
let c = RefCell::new(0);
*c.borrow_mut() += 1;Verificação de empréstimo em tempo de execução - entra em pânico em caso de violação.
5. Cow<'a, T> Clone-on-Write
use std::borrow::Cow;
let s: Cow<str> = Cow::Borrowed("hello");Empresta até que a mutação force uma cópia de propriedade.
Exemplos Intermediários
6. Rc<RefCell<T>>
use std::rc::{Rc, RefCell};
let v = Rc::new(RefCell::new(vec![1]));
v.borrow_mut().push(2);Grafos em código single-threaded.
7. Weak<T> Quebrando Ciclos
use std::rc::{Rc, Weak};
// upgrade() retorna Option<Rc<T>>8. Deref Personalizado
use std::ops::Deref;
struct MyBox<T>(T);
impl<T> Deref for MyBox<T> {
type Target = T;
fn deref(&self) -> &T { &self.0 }
}Relacionado: Melhores Práticas de Ponteiros Inteligentes
Versões de Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.