Zum Inhalt springen

Deref Trait

use std::ops::Deref;
#[derive(Clone, Copy)]
struct AccessLogger(i32);
impl Deref for AccessLogger {
type Target = i32;
fn deref(&self) -> &Self::Target {
println!("deref");
&self.0
}
}
fn main() {
let n = AccessLogger(-1);
let x = *n + 1;
let n2 = n;
println!("{} {}", x, *n)
}

Der AccessLogger gibt “deref” jedes Mal aus, wenn n dereferenziert wird, was zweimal geschieht. Beachten Sie, dass das Kopieren von n nach n2 n nicht dereferenziert.