Smart Pointers
Deref
Custom Pointer-Like Wrapper
Types that implement Deref can behave like references at the use site.
Program
Play the program to wrap a number, dereference the wrapper, and add one.
deref_wrapper.rs
use std::ops::Deref;
struct Meter(i32);
impl Deref for Meter {
type Target = i32;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let base = ;
let meter = Meter(base);
let next = *meter + 1;
println!("{next}");
}
use std::ops::Deref;
struct Meter(i32);
impl Deref for Meter {
type Target = i32;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let base = ;
let meter = Meter(base);
let next = *meter + 1;
println!("{next}");
}
use std::ops::Deref;
struct Meter(i32);
impl Deref for Meter {
type Target = i32;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let base = ;
let meter = Meter(base);
let next = *meter + 1;
println!("{next}");
}
Deref
`Deref` tells Rust how to reach the wrapped target value.
associated type
`type Target = i32` declares what dereferencing produces.
operator
`*meter` calls the dereference behavior and reads the inner integer.