1use defer_drop::DeferDrop;
2use std::iter::repeat_with;
3use std::time::{Duration, Instant};
4
5fn timer(f: impl FnOnce()) -> Duration {
6 let start = Instant::now();
7 f();
8 start.elapsed()
9}
10
11fn main() {
12 println!("Allocating a ridiculously large vector");
13 let vec1: Vec<Vec<String>> = repeat_with(|| {
14 repeat_with(|| "Hello, World".to_string())
15 .take(1000)
16 .collect()
17 })
18 .take(1000)
19 .collect();
20
21 println!("Duplicating that vector");
22 let vec2 = vec1.clone();
23 let defer_vec1 = DeferDrop::new(vec1);
24
25 println!("Dropping the vectors");
26
27 let vec1_timer = timer(move || drop(defer_vec1));
28 let vec2_timer = timer(move || drop(vec2));
29
30 println!("Duration of deferred drop: {:?}", vec1_timer);
31 println!("Duration of foreground drop: {:?}", vec2_timer);
32}