use on_drop::OnDrop; use std::sync::Arc; use std::mem::ManuallyDrop; use std::sync::atomic::{AtomicBool, Ordering::Relaxed}; #[test] #[should_panic(expected = "drop 2 times")] fn test(){ let droped = Arc::new(AtomicBool::new(false)); let droped_tmp = droped.clone(); let drop_item =OnDrop::new(1, move|| droped_tmp.store(true, Relaxed)); let mut drop_item=ManuallyDrop::new(drop_item); unsafe{ ManuallyDrop::drop(&mut drop_item) }; assert_eq!(droped.load(Relaxed), true); unsafe{ ManuallyDrop::drop(&mut drop_item) }; }